我在查看Swift 2.2代码时看到了这一点,我很困惑:
(myVar?.aProperty=aValue)!
其中aValue不是可选的。
这个表达式的结果没有存储在任何地方,因此为什么要放一个!在末尾?此外,这种表达的术语是什么?
答案 0 :(得分:1)
在闭包中使用时会有所不同。
let closure1 = {
aVar?.aProperty = aValue
}
let closure2 = {
(aVar?.aProperty = aValue)!
}
Swift将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中,最后一个例子没有编译。
如果您在完全不同的上下文中找到代码而不是关闭,我无法猜测其目的是什么。