加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift,可选包装器. “?”“!”我明白它是如何工作的.但为什么

发布时间:2020-12-14 02:26:08 所属栏目:百科 来源:网络整理
导读:我明白“
我明白“!”要么 ”?”作品.但我不太确定与之相比的额外好处是什么!= nil checking.转移到“!?”的额外好处是什么?
我觉得这只是Apple添加的东西,但与iOS现状相比,无法真正看到额外的好处.
我错过了什么吗?
提前致谢.
检查nil和要求可选的unwrapped之间的区别可能相当于代码崩溃与否之间的差异.如果使用正确,可选项可以提高安全性并使代码更具可读性.

假设您有一个数组,并且想要获取其中的第一个值.你可以这样做:

if !arr.isEmpty {
    useValue(arr[0])
}

但是当然,很容易忘记isEmpty部分,如果你这样做,你的代码会因为越界错误而崩溃.

所以,有一个更好的方法:使用数组的第一个方法,如果数组为空,则返回一个可选的nil:

if let val = arr.first {
    useValue(val)
}

有了这个表格,你就不会错.使用arr是不可能的.没有打开它的第一个值.如果您忘记了,则会出现编译错误.它对我的眼睛也更具可读性/

大概你会期望你的!= nil公式可以像这样工作:

if arr.first != nil {
    // all optionals would be “implicit”
    useValue(arr.first)
}

暂且不说你打电话.第一次两次,这有点效率低,而且类型兼容性的问题,基本上这让你回到原点 – 你可能忘记做零比较,然后,kaboom.或者,您可以采用Objective-C方法并说nil可以发送消息 – 但这也会导致各种混淆(个人我讨厌隐含发送消息的概念,nil意味着无操作),还有导致问题,当函数返回值类型(如Int)时,您会怎么做.一切都可以为空吗?这导致了Obj-C土地的混乱.

更重要的是,一旦你处理了可选项,你可以引入各种各样的便利,比如nil-coalescing:

// default to 0 if no first element
arr.first ?? 0
// much neater than this equivalent form:
arr.first != nil ? arr.first : 0

或可选比较:

// will only be true if arr is non-nil and zero
if arr.first == 0 {

}

有关更多示例,请参阅this answer

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读