0

有什么区别

self?.profile!.id!

(self?.profile!.id!)!

XCode 将第一个转换为第二个。

4

2 回答 2

1

第一个包含self?which 方法self是可选的,导致相关属性(profile!.id!在您的情况下)与可选链接self的存在相关:

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

为了更简单,你可以认为id!nullity 也是可选的,即使你强制解包它,因为它与 ; 的存在有关self。If selfis nil, profileand idwill 也nil隐含,因为它们与 的存在有关self

提及:(self?.profile!.id!)!意味着链的整个价值将被强制包装。

请注意,实施:

self!.profile!.id!

导致相同的输出

(self?.profile!.id!)!

因为self!是强制展开的,所以 的值id不会与 的 的无效性相关,self因为编译器假定它self总是有一个值。

但是,这种方法是不安全的,您应该使用可选绑定。

于 2017-12-18T13:00:55.737 回答
1

首先,你使用了太多的问号和感叹号!!!

实际上没有区别。结果是一个强制展开的可选。

通常,如果链接的最后一项的结果是非可选的,则 Xcode 会建议该语法,因此感叹号会导致错误,例如

text?.count!

然后 Xcode 建议

(text?.count)!

但在这种情况下,勇敢地

text!.count
于 2017-12-18T13:05:15.707 回答