gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:33:38 26 4
gpt4 key购买 nike

我在审查 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com