我正在看斯坦福斯威夫特( Stanford )在ItunesU上的讲师,在理解上有一些困难。
这位讲师正在把一串字排成双字。他这样做如下:
return NSNumberFormatter().numberFromString(display.text!)!.doubleValue无论如何,display.text是一个UILabel,当我这样做时,我的应用程序崩溃了,我得到了以下错误:
致命错误:在展开可选值时意外找到零
当我像这样键入字符串时:
(display.text! as NSString).doubleValue效果很好。
我知道在任何地方都必须有一个可选的变量,但我并不是说在这一点上出了什么问题。
发布于 2015-02-09 22:21:43
问题是您的display.text在文本中没有一个有效的数字。所以它会返回零。
所以你的表情会变成:
return nil!.doubleValue肯定会坠毁的。
对于将String转换为double,第二种方法更合适。意思是使用:
(display.text! as NSString).doubleValue是更好的解决这个问题的方法。
参考资料:NSNumberFormatter类引用
- numberFromString:返回通过解析给定字符串创建的NSNumber对象。 声明 Swiftfunc numberFromString(_ string: String) -> NSNumber?目标-C- (NSNumber *)numberFromString:(NSString *)string参数 字符串 解析以生成返回的number对象的NSString对象。 返回值 通过使用接收方的格式解析字符串创建的NSNumber对象。如果传递的字符串中没有数字,则返回零。 讨论 字符串中的任何前导空格都将被忽略。例如,字符串“5”和“5”的处理方式相同。
发布于 2015-02-15 16:24:41
米卡,我刚刚弄明白为什么我的计算器程序和你一样的错误信息崩溃了。请记住,当我们创建enter键时,它仍然被“绑定”到appendDigit函数,我们必须选择/右键单击按钮才能断开连接。我和您争着解决同一个问题,结果发现我已经复制/粘贴了操作键,并且它们都仍然连接到appendDigit函数。这意味着每次我按下"x“键时,它都会向appendDigit函数发送一个非数字,该函数在展开时相当于"nil”。希望这能有所帮助。威尔顿
发布于 2015-02-09 22:08:15
在第一种形式中,如果numberFromString不包含数字,则nil返回display.text。
我的猜测是,在第一种情况下,您的display.text不是用数字初始化的。因此,numberFromString返回试图使用!展开包装的nil。这会造成错误。
在第二种形式中,您将类型设置为NSString --不管内容是什么(空,"1.0",“foo”.)然后调用doubleValue (如果字符串没有以有效文本(不同于数字)开头)返回0.0,.This不会抛出错误,在最坏的情况下,它将返回0.0。
https://stackoverflow.com/questions/28420232
复制相似问题