我也被课程的那部分困住了!
我认为苹果最近对 NSNumberFormatter 的 numberFromString 方法进行了更改。因为当我打印出display.text!时,没有任何错误。换句话说,它在展开该部分时没有找到 nil。
我们要展开的另一部分就在这里,在第二个!标记,我们只打开这部分:
NSNumberFormatter().numberFromString(display.text!)
但我们遇到了一个错误,因此 numberFromString 应该返回 nil。
但在视频中,事实并非如此。它完美地将浮点数字符串(例如“36.0”)转换为 NSNumber,然后转换为 Double。
由于你的问题是在 5 月 20 日提出的,而且我找不到任何“旧”问题,我认为苹果已经更改了 numberFromString 上的代码。
编辑:我做了一些疯狂的事情,并使用查找和替换(command + F)将代码中的所有“Double”替换为“Int”。乘法部分现在运行良好,我认为问题出在“.”上。部分双打。
编辑2:我解决了。美国等一些国家/地区使用“.”。分隔小数,而其他一些国家(例如土耳其)则使用“,”来做到这一点。它适用于视频,因为他是在美国做的。
NSNumberFormatter 有一个名为decimalSeparator 的属性。我们必须将其设置为“.”。我对我的代码做了以下更改,效果完美。
var displayValue: Double {
get {
var formatter = NSNumberFormatter()
formatter.decimalSeparator = "."
return (formatter.numberFromString(display.text!)!.doubleValue)
}
set {
display.text = "\(newValue)"
userIsInTheMiddleOfTypingNumber = false
}
}