Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使用mutableCopy()将Mutating方法发送到不可变对象错误_Swift_Nsmutablearray - Fatal编程技术网

Swift 使用mutableCopy()将Mutating方法发送到不可变对象错误

Swift 使用mutableCopy()将Mutating方法发送到不可变对象错误,swift,nsmutablearray,Swift,Nsmutablearray,简言之,从NSUserDefaults获取数组后,当我试图更改NSMutableArray值时,我将Mutating method发送到不可变对象错误 generalDone[self.todoTableView.selectedRow] = 1 保存到NSUserDefaults时,我将所有NSMutableArrays添加到一个NSMutableArray中。喜欢 var saveArray:NSMutableArray = NSMutableArray() saveArray.remov

简言之,从
NSUserDefaults
获取数组后,当我试图更改
NSMutableArray
值时,我将
Mutating method发送到不可变对象
错误

generalDone[self.todoTableView.selectedRow] = 1
保存到
NSUserDefaults
时,我将所有
NSMutableArray
s添加到一个
NSMutableArray
中。喜欢

var saveArray:NSMutableArray = NSMutableArray()
saveArray.removeAllObjects()
saveArray.add(generalTodos)
..
..
..
saveArray.add(generalDone)
UserDefaults.standard.set(saveArray, forKey: "test3")
但是当我从NSUserDefault获取数组时,我确信它是一个mutableCopy()


仍然得到相同的错误。也许这个想法很傻,但我认为saveArray中的数组仍然是不可变的。但我不知道如何管理它们。你有什么想法


努力学习斯威夫特。请有礼貌-_-

如果要使用Objective-C NSMutableArray,请说
as!NSMutableArray
不会生成一个;制作NSMutableArray的方法是

let mutableArray = NSMutableArray(array: otherArray)
但是您应该使用Swift数组,而不是Objective-C NSArray/NSMutableArray。要使Swift数组可变,请使用
var
声明它,而不是
let
。例如,如果
generalTodos
是一个字符串数组,您可以说

var generalTodos = [String]()

请问您为什么要使用NSArray/NSMutableArray?它们是Objective-C可可类。您应该使用Swift数组。它们让事情变得容易多了。“但我认为savearray中的数组仍然是不可变的”好主意。您可能正在制作
saveArrays
的可变副本,但这并不意味着其中的数组是可变的。此外,我建议不要将数组保存到NSUserDefaults中。只需将
generalTodos
保存为自己的数组,并使用自己的键。最后,请注意,UserDefaults对于可以保存到其中的内容非常挑剔。您可以保存字符串数组,但不能保存todoObject数组。所以要小心。
var generalTodos = [String]()