有时我发现自己在编写这样的 swift 2 代码:
class Test {
var optionalInt: Int?
var nonOptionalInt: Int = 0
func test() {
if let i = optionalInt {
nonOptionalInt = i
}
// do more stuff
}
}
有问题的部分是:
if let i = optionalInt {
nonOptionalInt = i
}
换句话说:如果 optionalInt 有一个值,则将其分配给变量 nonOptionalInt,否则什么也不做。
在 swift 2 中是否有一种等效的方法可以在优雅的单行中表达这一点,而无需使用 if let i 添加中间变量?
编辑
在考虑了第一个答案之后......
显然有一个等价的方式
if optionalInt != nil {
nonOptionalInt = optionalInt!
}
三元运算符 ? : 不等效,因为它们可能会触发原始代码不会触发的 didSet(如果这是预期的副作用,则很好)
迄今为止最优雅的答案似乎是
nonOptionalInt = optionalInt ?? nonOptionalInt
它也可能触发像三元运算符一样的 didSet,因此不等效(如果这是有意的,也很好)。
我想我对苹果的愿望是
nonOptionalInt = optionalInt ??
或者
nonOptionalInt ??= optionalInt