Swift 斯坦福计算器应用程序不断崩溃

Swift 斯坦福计算器应用程序不断崩溃,swift,Swift,我正在斯坦福大学使用Swift在线学习斯坦福iPad和iPhone开发者课程,并致力于创建一个计算器应用程序。(对编程来说还是有点陌生。) 然而,每当我从计算器中选择一个运算符时,它总是伴随着错误消息崩溃 operandStack = [36.0] fatal error: unexpectedly found nil while unwrapping an Optional value (lldb) 然后当我在ViewController中查看源代码的哪一部分高亮显示时。这是: NSN

我正在斯坦福大学使用Swift在线学习斯坦福iPad和iPhone开发者课程,并致力于创建一个计算器应用程序。(对编程来说还是有点陌生。)

然而,每当我从计算器中选择一个运算符时,它总是伴随着错误消息崩溃

operandStack = [36.0] 
fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb) 
然后当我在ViewController中查看源代码的哪一部分高亮显示时。这是:

 NSNumberFormatter().numberFromString(display.text!)!.doubleValue }
但是,下面的错误消息如下所示:

THREAD 1:EXC_BAD_INSTRUCTION(code:EXC_1386_INVOP,subcode=0x0)
我不明白发生了什么,因为我从讲座中逐字逐句输入了密码

感谢您的帮助

提前谢谢

“展开可选对象时发现为零”表示在使用运算符时,变量可能有值,也可能没有值!你告诉斯威夫特“相信我,这里面有价值”,但是如果没有,斯威夫特会抛出一个异常,就像你刚才看到的一样

避免这种情况的最佳方法是使用前检查:

if let value = display.text{
    //if your code get here value is safe to use
    NSNumberFormatter().numberFromString(value).doubleValue
}

我也被困在了课程的那一部分

我认为苹果最近对NSNumberFormatter的numberFromString方法进行了修改。因为当我打印出display.text!,没有什么问题。换言之,在展开该零件时未找到零

我们正在拆开的另一部分在这里,在第二个!马克,我们只打开这部分:

NSNumberFormatter().numberFromString(display.text!)
但是我们有一个错误,所以numberFromString应该返回nil

但在视频中,它没有。它完美地将浮点数字符串(如“36.0”)转换为NSNumber,然后再转换为Double

由于你的问题是在5月20日提出的,我找不到任何“老”问题,我想苹果已经改变了numberFromString上的代码

编辑:我做了一些疯狂的事情,使用Find&Replace(命令+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 

    }
}

当您的代码崩溃时,
display.text
是什么?