swift 发送到不可变对象的变异方法

swift mutating method sent to immutable object

我无法解决这个错误,我正尝试像在 objective-c 中一样向数组添加一个字符串,但是 swift 给了我一个奇怪的错误。

var fileArray:NSMutableArray = []

alert.addAction(UIAlertAction(title: "Done", style: UIAlertActionStyle.Default, handler:{ (UIAlertAction)in
            self.fileArray.addObject(self.urlTextField.text)
            self.processURL()
        }))

错误:
由于未捕获的异常而终止应用程序 'NSInternalInconsistencyException',原因:'-[__NSCFArray insertObject:atIndex:]:发送到不可变对象的变异方法'

fileArray如何不可变?我将其声明为 MutableArray!!!!!!

编辑::: 所以原来问题是我填充数组的方式

fileArray = myDict?.valueForKey("fileList") as! NSMutableArray

这解决了问题

fileArray = myDict?.valueForKey("fileList")!.mutableCopy() as! NSMutableArray

一个数组不会仅仅因为你这样声明它或者因为你用 as! NSMutableArray 将它转换为可变而变成可变的。只有使用 [[NSMutableArray alloc] ....] 或通过创建数组的 mutableCopy 将其创建为可变数组时,数组才是可变的。

(字典、字符串、NSSet 和 NSData 也一样)

因为你的数组只包含一个类型,我建议使用 Swift 类型,这样更容易,var 是可变的,let 是不可变的

var fileArray : Array<String> = []

alert.addAction(UIAlertAction(title: "Done", style: UIAlertActionStyle.Default, handler:{ (UIAlertAction)in
            self.fileArray.append(self.urlTextField.text)
            self.processURL()
        }))