Swift,可选包装器. “?”“!”我明白它是如何工作的.但为什么
我明白“!”要么 ”?”作品.但我不太确定与之相比的额外好处是什么!= 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |