我尝试将AnyObject数据转换为可变数组,但它仍然像非可变数组一样工作,并在尝试变异后在运行时崩溃。有人可以解释一下吗?
就像我从JSON获取一些数据并且我知道它将是Array数据类型(我将其命名为数据),现在我将它转换为可变数组,假设如下:
让mutArray:NSMutableArray =数据为!的NSMutableArray
但是当我稍后尝试改变它时,mutArray仍然是一个不可变的数组。几个月前这段代码完美无缺,现在它给出的问题就像我试图改变一个非可变数组。
答案 0 :(得分:0)
那是因为强制转换实际上并没有以任何方式改变对象,它只是告诉编译器它是某种类型的。换句话说,它只影响代码的类型检查方式,它实际上并没有改变代码在运行时的行为。要将NSArray
实际更改为NSMutableArray
,您需要:
let mutArray = NSMutableArray(array: data)
此行实际上会创建一个新的NSMutableArray
,并使用您的data
数组填充它。
如果您的代码之前有效,那么由于某种原因,您的原始数据必须已经为NSMutableArray
。 NSArray
秘密地NSMutableArray
s实际上是很常见的(尽管从任何给定的方法中依赖这个事实当然是个坏主意,因为正如我们刚才所知,它可能在任何方面发生变化力矩)。