有什么区别
self?.profile!.id!
和
(self?.profile!.id!)!
XCode首先转换为第二个。
第一个包含self?
,这意味着self
是可选的,导致让相关属性(在你的情况下为profile!.id!
)与self
Optional Chaining的存在相关:
可选链接是一个查询和调用当前可能为nil的可选项的属性,方法和下标的过程。如果optional包含值,则属性,方法或下标调用成功;如果optional是nil,则属性,方法或下标调用返回
nil
。多个查询可以链接在一起,如果链中的任何链接为零,整个链都会正常失败。
为了使它更简单,你可以想到id!
nullity也是可选的,即使你强行展开它,因为它与self
的存在有关;如果self
是nil
,profile
和id
也将是nil
,因为它们与self
的存在有关。
提及:(self?.profile!.id!)!
意味着链条的整个价值将被强制包裹。
注意实施:
self!.profile!.id!
导致相同的输出
(self?.profile!.id!)!
由于self!
被强制解包,id
的值与self
的无效性无关,因为编译器假设self
将始终具有值。
但是,这种方法不安全,你应该选择绑定。
首先,你使用了太多问题和感叹号!
实际上没有区别。结果是强制解包的可选项。
通常Xcode建议语法,如果链接的最后一项的结果是非可选的,那么感叹号会导致错误,例如
text?.count!
然后Xcode建议
(text?.count)!
但在这种情况下,勇敢和写
text!.count