为什么无法对隐式解包的可选变量进行突变?
这是一个重现问题的简短示例:
var list: [Int]! = [1] list.append(10) // Error here
Immutable value of type '[Int]' only has mutating members named 'append'
var number: Int! = 1 number = 2 number = 2 + number number += 2 // Error here
Could not find an overload for '+=' that accepts the supplied arguments
更新:
Xcode Beta 5中的一个小警告已解决此问题:
var list: [Int]! = [1] list.append(10) var number: Int! = 1 number! += 2 number += 2 // compile error
该数组可以按预期工作,但是现在看来整数仍然需要显式拆包以允许使用 +=
+=
当前,这仅仅是Optionals的本质(无论是否隐式解包)。unwrap运算符返回一个不变的值。这可能是固定的,或者将来会提供更好的解决方案。
目前唯一的解决方法是将数组包装在一个类中:
class IntArray { var elements : [Int] }