【问题标题】:NSScanner scanDouble UnsafeMutablePointerNSScanner scanDouble UnsafeMutablePointer
【发布时间】:2016-03-22 03:23:44
【问题描述】:

我正在使用NSScanner 扫描字符串并从中提取双精度。这是我尝试解决问题的沙盒代码

let string = "maxage=1234567890"
let scanner2 = NSScanner(string: string)
scanner2.scanUpToString("=", intoString: nil)
scanner2.scanString("=", intoString: nil)
let maxage2:UnsafeMutablePointer<Double> = UnsafeMutablePointer<Double>()
scanner.scanDouble(maxage2)
print(scanner2.scanLocation)
print(maxage2)

打印出来:

7
0x0000000000000000

所以前两个调用消耗字符串的第一部分工作,但扫描一个双不工作。

我见过其他类似这样的解决方案:

var double = 0.0
scanner.scanDouble(&double)

但这似乎不再适用于 Swift。也许它在早期版本中是这样的?

我该如何解决这个问题?

【问题讨论】:

  • 对我仍然有效

标签: swift cocoa cocoa-touch nsscanner


【解决方案1】:

我想知道你是不是不小心用scanner.scanDouble而不是scanner2.scanDouble打错了?

这对我有用:

let string = "maxage=1234567890"
let scanner2 = NSScanner(string: string)
scanner2.scanUpToString("=", intoString: nil)
scanner2.scanString("=", intoString: nil)
var aDoubleNumber = 0.0
scanner2.scanDouble(&aDoubleNumber)
print(scanner2.scanLocation)
print(aDoubleNumber)

【讨论】:

  • 是的!这样可行。有趣的是我尝试了很多东西。我基本上试过了,现在我意识到我所做的是定义了'let aDoubleNumber',所以我会得到一个编译错误'& 与 UnsageMutablePointer' 类型的非输入参数一起使用,所以我很困惑认为我不能用 & 传递一个引用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多