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()
}))
我无法解决这个错误,我正尝试像在 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()
}))