致命错误:在打开可选值时意外发现nil - Standford Calculator

Mic*_*ael 3 optional ios swift xcode6

我正在观看ItunesU的Standford Swift讲师并且在理解方面遇到一些麻烦.

讲师在某一点上将一个字符串转换为双字符串.他做了如下:

return NSNumberFormatter().numberFromString(display.text!)!.doubleValue
Run Code Online (Sandbox Code Playgroud)

display.text是一个UILabel无论如何,当我这样做时,我的应用程序崩溃,我收到以下错误:

(display.text! as NSString).doubleValue
Run Code Online (Sandbox Code Playgroud)

当我像这样对类型字符串进行类型转换:

return NSNumberFormatter().numberFromString(display.text!)!.doubleValue
Run Code Online (Sandbox Code Playgroud)

它工作正常.

我知道在任何地方都必须有一个可选的var,但我不是那么说它在这一点上说错了.我很满意每一个提示.

Mid*_* MP 5

问题是您display.text的文本中没有有效数字.所以它将返回零.

所以你的表达将成为:

return nil!.doubleValue
Run Code Online (Sandbox Code Playgroud)

它肯定会崩溃.

将a转换Stringdouble第二种方法更合适.意思是使用:

(display.text! as NSString).doubleValue
Run Code Online (Sandbox Code Playgroud)

对于这种情况来说是更好的方法.


参考:NSNumberFormatter类参考

- numberFromString:

返回通过解析给定字符串创建的NSNumber对象.

宣言

迅速

func numberFromString(_ string: String) -> NSNumber?

Objective-C的

- (NSNumber *)numberFromString:(NSString *)string

参数

解析为生成返回的数字对象的NSString对象.

回报价值

通过使用接收器格式解析字符串创建的NSNumber对象.如果传递的字符串中没有数字,则返回nil.

讨论

字符串中的任何前导空格都将被忽略.例如,字符串"5"和"5"以相同的方式处理.