我在审查 Swift 2.2 代码时看到了这一点,我很困惑:
(myVar?.aProperty=aValue)!
其中 aValue 不是可选的。
这个表达式的结果没有存储在任何地方,因此为什么要放一个 !在最后?另外,这种表达方式的术语是什么?
最佳答案
当在闭包中使用时,它有一点不同。
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 中,最后一个示例没有编译。
如果您发现该代码处于与闭包完全不同的上下文中,我无法猜出其目的是什么。
关于swift - 在 Swift 2.2 中显式展开对可选属性的赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39606845/