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