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

问题描述 投票:0回答:2

有什么区别

self?.profile!.id!

(self?.profile!.id!)!

XCode首先转换为第二个。

swift optional-variables
2个回答
1
投票

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

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

为了使它更简单,你可以想到id! nullity也是可选的,即使你强行展开它,因为它与self的存在有关;如果selfnilprofileid也将是nil,因为它们与self的存在有关。

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

注意实施:

self!.profile!.id!

导致相同的输出

(self?.profile!.id!)!

由于self!被强制解包,id的值与self的无效性无关,因为编译器假设self将始终具有值。

但是,这种方法不安全,你应该选择绑定。


1
投票

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

实际上没有区别。结果是强制解包的可选项。

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

text?.count!

然后Xcode建议

(text?.count)!

但在这种情况下,勇敢和写

text!.count
© www.soinside.com 2019 - 2024. All rights reserved.