为了账号安全,请及时绑定邮箱和手机立即绑定

什么时候我应该将一个可选的值与零进行比较?

什么时候我应该将一个可选的值与零进行比较?

守着星空守着你 2019-07-06 17:34:06
什么时候我应该将一个可选的值与零进行比较?通常,您需要编写如下代码:if someOptional != nil {     // do something with the unwrapped someOptional e.g.            someFunction(someOptional!)}这似乎有点冗长,而且我还听说使用!强制展开操作符可能是不安全的,最好避免。有更好的方法来处理这件事吗?
查看完整描述

3 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

我认为你应该回到SWIFT编程书,了解这些东西是干什么用的。!在绝对确定可选项不是零时使用。既然你宣称你是绝对肯定的,如果你错了,它就会崩溃。完全是故意的。它是“不安全的和最好的避免”,在您的代码中断言是“不安全的和最好的避免”。例如:

if someOptional != nil {
    someFunction(someOptional!)}

那个!绝对安全。除非您的代码有一个很大的错误,比如错误地编写(我希望您发现了错误)。

if someOptional != nil {
    someFunction(SomeOptional!)}

在这种情况下,您的应用程序可能崩溃,您调查它崩溃的原因,并修复错误-这正是崩溃的目的。SWIFT的一个目标是,您的应用程序显然应该正确工作,但由于SWIFT不能强制执行,它强制您的应用程序要么工作正常,要么崩溃,如果可能的话,所以错误会在应用程序发布之前被删除。


查看完整回答
反对 回复 2019-07-06
?
潇湘沐

TA贡献1816条经验 获得超6个赞

你有一个办法。它叫做可选链..来自文件:

可选链接是用于查询和调用当前可能为零的可选项的属性、方法和下标的进程。如果可选项包含值,则属性、方法或下标调用将成功;如果可选项为零,则属性、方法或下标调用返回nil。多个查询可以链接在一起,如果链中的任何链接为零,则整个链将优雅地失败。

下面是一些例子

class Person {
    var residence: Residence?}class Residence {
    var numberOfRooms = 1}let john = Person()if let roomCount = john.residence?.numberOfRooms {
    println("John's residence has \(roomCount) room(s).")} else {
    println("Unable to retrieve the number of rooms.")}// prints "Unable to retrieve the number of rooms."

你可以查看整篇文章这里.


查看完整回答
反对 回复 2019-07-06
  • 3 回答
  • 0 关注
  • 472 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信