5

为什么不适+=用于隐式展开的选项,例如:

var count: Int! = 10
count = count + 10 // This works
count += 10 // this does not work

为什么不像count = count + 10?

4

1 回答 1

2

它不起作用,因为复合赋值运算符+=期望左侧是可变Int变量。当您传递它时count,编译器会解开隐式解包的可选项并发送一个不可变的Int值,该值不能作为预期的inout参数传递。+=

如果你真的想这样做,你可以重载+=

func += (left: inout Int!, right: Int) {
    left = left! + right
}

现在+=将左侧作为隐式展开的可选项发送而不展开,并且展开是在函数内部显式完成的。

var count: Int! = 10
count = count + 10 // 20
count += 10 // 30
于 2017-07-24T20:42:28.997 回答