没有使用nil合并运算符重新赋值的简写(??)

时间:2015-02-23 11:18:12

标签: swift

这是否有简写:

var x: Int = 42;
var y: Int? = nil
x = y ?? x

E.g。如果y为nil

,则重新分配相同的值/不重新分配

编辑:为了澄清,在示例中,如果y为零,我想保留x的值(42)。更好的措辞可能是“赋值,如果不是nil ”运算符。

Edit2:正如@rintaro指出的那样,重新分配可能会产生我想避免的副作用。我可以这样诉诸if let

var x: Int = 42;
var y: Int? = nil
if let y = y {
    x = y
}

但这非常详细。

1 个答案:

答案 0 :(得分:1)

没有内置运算符。

改为使用map

map(y) { x = $0 }
// OR
y.map { x = $0 }

注意:当观察变量时,此技术很有用:

var x: Int = 42 {
    didSet {
        println("didSet")
    }
}

var y: Int? = nil
x = y ?? x // `didSet` is called
map(y) { x = $0 } // `didSet` is not called 
相关问题