我看到这个在审查雨燕2.2的代码,我很不解:明确的解包分配的可选特性在雨燕2.2
(myVar?.aProperty=aValue)!
其中安勤为不可选。
这个表达式的结果不存储在任何地方,因此为什么放一个!最后?另外,这种表达方式的术语是什么?
我看到这个在审查雨燕2.2的代码,我很不解:明确的解包分配的可选特性在雨燕2.2
(myVar?.aProperty=aValue)!
其中安勤为不可选。
这个表达式的结果不存储在任何地方,因此为什么放一个!最后?另外,这种表达方式的术语是什么?
它在闭包中使用时有点不同。
let closure1 = {
aVar?.aProperty = aValue
}
let closure2 = {
(aVar?.aProperty = aValue)!
}
夫特推断的closure1
类型()->Optional<()>
,又名()->Void?
。这与()->Void
不一样。因此,closure1
不能传递给声称为()->Void
的参数。
所以,如果你想关闭的类型()->Void
,你可能需要编写这样的事:
let closure1 = {
_ = aVar?.aProperty = aValue
}
或者这样:
let closure1 = {
aVar?.aProperty = aValue
return
}
要不然:
let closure1 = {
(aVar?.aProperty = aValue)!
}
现在,你可以写这样的东西:
let closure1:()->Void = {
aVar?.aProperty = aValue
}
但是,在旧的Swift中,最后一个例子没有编译。
如果您在完全不同的上下文中发现该代码而不是闭包,我无法猜测目的是什么。
很好的解释。然而,代码被嵌入到不返回任何值的func中。 – andrewz
IMO,你是对的。表达结果不被使用。 –