我是编程新手,我已经开始参加 iTunes U 上的斯坦福课程,以制作 iPhone 8 应用程序。他们使用 Xcode 6 和 Swift 1,而我在 El Capitan 使用 Xcode 7 和 Swift 2。我发现 Xcode 能够理解并帮助我纠正的代码存在一些差异(“println”是例如现在“打印”),但我被代码的一个特定部分绊倒了:
var displayValue: Double {
get {
return NSNumberFormatter().numberFromString(display.text!)!.doubleValue
}
set {
display.text = "\(newValue)"
userIsInTheMiddleOfTypingANumber = false
}
}
我已经仔细检查了几次,以确保这正是老师写的。他的构建正确且功能正确,而我的构建正确,但是当我尝试操作它时显示此致命错误,“在展开可选值时意外发现 nil”(所有详细信息请参见屏幕截图)。
我一直在互联网上寻找一些类似的例子,包括这个网站上的一个(斯坦福计算器应用程序不断崩溃),但在尝试了所有建议后,我得出结论,我的系统中必须有一些东西是独一无二的,否则我正在操作在一个新的 Xcode/Swift 环境中,而不是其他有这个问题的环境。没有一个解决方案可以解决问题,而且它们都添加了自己的错误。
在回答其他人的问题时,有人建议我们使用此代码来确保如果“display”返回“nil”,它将提供“0”:
return (NSNumberFormatter().numberFromString(display.text) as? Double) ?? 0
我试过这个,但它只给了我更多的错误,有些似乎与 Swift 2 相关(它需要在 double 后面加一个逗号,要我打开 display.text,并抱怨缺少预期的表达式——也许是建议的代码在 Swift 1 中表现不错??)。