为什么+=
无法使用隐式展开的选项,例如:
var count: Int! = 10
count = count + 10 // This works
count += 10 // this does not work
为什么不包含可选的隐式解包,就像count = count + 10
的情况一样?
答案 0 :(得分:2)
它不起作用,因为复合赋值运算符+=
期望左侧是可变Int
变量。当您传递count
时,编译器会解包隐式解包的可选项,而是发送一个不可变的Int
值,该值不能作为inout
期望的+=
参数传递。 / p>
如果您真的想这样做,可以重载+=
:
func += (left: inout Int!, right: Int) {
left = left! + right
}
现在+=
将左侧作为隐式展开的可选项发送而不展开它,并且在函数内部显式完成展开。
var count: Int! = 10
count = count + 10 // 20
count += 10 // 30