小编典典

隐式展开的可选使不可变

swift

为什么无法对隐式解包的可选变量进行突变?

这是一个重现问题的简短示例:

带阵列

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


阅读 270

收藏
2020-07-07

共1个答案

小编典典

更新:

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]
}
2020-07-07