Swift中两个可选语法之间的区别

时间:2017-12-18 12:47:29

标签: swift optional-variables

之间有什么区别
self?.profile!.id!

(self?.profile!.id!)!

XCode首先转换为第二个。

2 个答案:

答案 0 :(得分:1)

第一个包含self?,这意味着self是可选的,导致让相关的属性(在您的情况下为profile!.id!)与self的存在相关联Optional Chaining

  

可选链接是查询和调用属性的过程,   方法,以及当前可能为nil的可选项的下标。如果   optional包含值,属性,方法或下标调用   成功; 如果可选项为nil,属性,方法或下标   致电返回nil 可以将多个查询链接在一起,   如果链中的任何链接为零,则整个链优雅地失败。

为了使其更简单,你可以认为id! nullity也是可选的,即使你强制解包它,因为它与self的存在有关;如果selfnil,则profileid也会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