我明白“!”要么 ”?”作品.但我不太确定与之相比的额外好处是什么!= nil checking.转移到“!?”的额外好处是什么?
我觉得这只是Apple添加的东西,但与iOS现状相比,无法真正看到额外的好处.
我错过了什么吗?
提前致谢.
我觉得这只是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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。