在 Swift 2.2 中显式展开对可选 属性 的赋值

Explicitly unwrapping an assignment to an optional property in Swift 2.2

我在查看 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,最后一个例子没有编译。


如果您发现该代码处于与闭包完全不同的上下文中,我无法猜出其目的是什么。