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