为什么`+ =`不适用于隐式解包的选项

时间:2017-07-24 20:23:11

标签: swift optional forced-unwrapping

为什么+=无法使用隐式展开的选项,例如:

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

为什么不包含可选的隐式解包,就像count = count + 10的情况一样?

1 个答案:

答案 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
相关问题