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]()