首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >致命错误:在展开可选值时意外发现为零-斯坦福计算器

致命错误:在展开可选值时意外发现为零-斯坦福计算器
EN

Stack Overflow用户
提问于 2015-02-09 21:59:46
回答 8查看 1.6K关注 0票数 3

我正在看斯坦福斯威夫特( Stanford )在ItunesU上的讲师,在理解上有一些困难。

这位讲师正在把一串字排成双字。他这样做如下:

代码语言:javascript
复制
return NSNumberFormatter().numberFromString(display.text!)!.doubleValue

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

致命错误:在展开可选值时意外找到零

当我像这样键入字符串时:

代码语言:javascript
复制
(display.text! as NSString).doubleValue

效果很好。

我知道在任何地方都必须有一个可选的变量,但我并不是说在这一点上出了什么问题。

EN

回答 8

Stack Overflow用户

发布于 2015-02-09 22:21:43

问题是您的display.text在文本中没有一个有效的数字。所以它会返回零。

所以你的表情会变成:

代码语言:javascript
复制
return nil!.doubleValue

肯定会坠毁的。

对于将String转换为double,第二种方法更合适。意思是使用:

代码语言:javascript
复制
(display.text! as NSString).doubleValue

是更好的解决这个问题的方法。

参考资料:NSNumberFormatter类引用

- numberFromString: 返回通过解析给定字符串创建的NSNumber对象。 声明 Swift func numberFromString(_ string: String) -> NSNumber? 目标-C - (NSNumber *)numberFromString:(NSString *)string 参数 字符串 解析以生成返回的number对象的NSString对象。 返回值 通过使用接收方的格式解析字符串创建的NSNumber对象。如果传递的字符串中没有数字,则返回零。 讨论 字符串中的任何前导空格都将被忽略。例如,字符串“5”和“5”的处理方式相同。

票数 5
EN

Stack Overflow用户

发布于 2015-02-15 16:24:41

米卡,我刚刚弄明白为什么我的计算器程序和你一样的错误信息崩溃了。请记住,当我们创建enter键时,它仍然被“绑定”到appendDigit函数,我们必须选择/右键单击按钮才能断开连接。我和您争着解决同一个问题,结果发现我已经复制/粘贴了操作键,并且它们都仍然连接到appendDigit函数。这意味着每次我按下"x“键时,它都会向appendDigit函数发送一个非数字,该函数在展开时相当于"nil”。希望这能有所帮助。威尔顿

票数 3
EN

Stack Overflow用户

发布于 2015-02-09 22:08:15

在第一种形式中,如果numberFromString不包含数字,则nil返回display.text

我的猜测是,在第一种情况下,您的display.text不是用数字初始化的。因此,numberFromString返回试图使用!展开包装的nil。这会造成错误。

在第二种形式中,您将类型设置为NSString --不管内容是什么(空,"1.0",“foo”.)然后调用doubleValue (如果字符串没有以有效文本(不同于数字)开头)返回0.0,.This不会抛出错误,在最坏的情况下,它将返回0.0。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28420232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档