swift mutating方法发送到不可变对象

时间:2015-07-09 18:27:40

标签: ios arrays swift nsmutablearray

我只是无法绕过这个错误,我试图在一个数组中添加一个字符串,就像我总是在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()
        }))

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

fileArray如何是不可变的?我宣布它为MutableArray !!!!!!

EDIT ::: 事实证明问题是我填充数组的方式

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

这解决了问题

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

2 个答案:

答案 0 :(得分:3)

数组不会因为您将其声明为可变而变得可变,或者因为您使用as! NSMutableArray将其强制转换为可变数组。如果数组被创建为具有[[NSMutableArray alloc] ....]的可变数组或者通过创建数组的mutableCopy,则该数组是可变的。

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

答案 1 :(得分:0)

由于你的数组只包含一个类型,我建议使用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()
        }))