在swift中,仍然认为构建可变数组是不可变的

时间:2016-07-22 18:29:50

标签: arrays swift xcode swift2 nsmutablearray

我尝试将AnyObject数据转换为可变数组,但它仍然像非可变数组一样工作,并在尝试变异后在运行时崩溃。有人可以解释一下吗?

就像我从JSON获取一些数据并且我知道它将是Array数据类型(我将其命名为数据),现在我将它转换为可变数组,假设如下:

让mutArray:NSMutableArray =数据为!的NSMutableArray

但是当我稍后尝试改变它时,mutArray仍然是一个不可变的数组。几个月前这段代码完美无缺,现在它给出的问题就像我试图改变一个非可变数组。

1 个答案:

答案 0 :(得分:0)

那是因为强制转换实际上并没有以任何方式改变对象,它只是告诉编译器它是某种类型的。换句话说,它只影响代码的类型检查方式,它实际上并没有改变代码在运行时的行为。要将NSArray实际更改为NSMutableArray,您需要:

let mutArray = NSMutableArray(array: data)

此行实际上会创建一个新的NSMutableArray,并使用您的data数组填充它。

如果您的代码之前有效,那么由于某种原因,您的原始数据必须已经NSMutableArrayNSArray秘密地NSMutableArray s实际上是很常见的(尽管从任何给定的方法中依赖这个事实当然是个坏主意,因为正如我们刚才所知,它可能在任何方面发生变化力矩)。