之间有什么区别
self?.profile!.id!
和
(self?.profile!.id!)!
XCode首先转换为第二个。
答案 0 :(得分:1)
第一个包含self?
,这意味着self
是可选的,导致让相关的属性(在您的情况下为profile!.id!
)与self
的存在相关联Optional Chaining:
可选链接是查询和调用属性的过程, 方法,以及当前可能为nil的可选项的下标。如果 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
将始终具有值。
但是,这种方法不安全,你应该使用可选的绑定。
答案 1 :(得分:1)
首先,你使用了太多问题和惊叹号!!!
实际上没有区别。结果是强制解包的可选项。
通常Xcode建议语法,如果链接的最后一项的结果是非可选的,那么感叹号会导致错误,例如
text?.count!
然后Xcode建议
(text?.count)!
但在这种情况下勇敢并写
text!.count