Swift错误:无法分配给不可变值

时间:2015-02-23 12:59:51

标签: macos swift immutability

我收到了上面这段代码的错误:

func store(name: String, inout array: [AnyObject]) {

    for object in array {

        if object is [AnyObject] {

            store(name, &object)
            return
        }
    }
    array.append(name)
}

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

使用object提取的项for是不可变的。你应该迭代数组indices

并且,该项目为AnyObject,您无法在不进行投射的情况下将其传递给inout array: [AnyObject]参数。在这种情况下,您应该将其强制转换为可变[AnyObject],然后重新分配

func store(name: String, inout array: [AnyObject]) {
    for i in indices(array) {
        if var subarray = array[i] as? [AnyObject] {
            store(name, &subarray)
            array[i] = subarray // This converts `subarray:[AnyObject]` to `NSArray`
            return
        }
    }
    array.append(name)
}

var a:[AnyObject] = [1,2,3,4,[1,2,3],4,5]
store("foo", &a) // -> [1, 2, 3, 4, [1, 2, 3, "foo"], 4, 5]