gpt4 book ai didi

swift - 使用 mutableCopy() 将变异方法发送到不可变对象(immutable对象)错误

转载 作者:行者123 更新时间:2023-11-28 15:52:01 24 4
gpt4 key购买 nike

简而言之,从 NSUserDefaults 获取数组后,当我尝试更改 NSMutableArray 时,我收到了 Mutating method sent to immutable object 错误值(value);

generalDone[self.todoTableView.selectedRow] = 1

当保存到 NSUserDefaults 时,我将所有 NSMutableArray 添加到一个 NSMutableArray。喜欢;

var saveArray:NSMutableArray = NSMutableArray()
saveArray.removeAllObjects()
saveArray.add(generalTodos)
..
..
..
saveArray.add(generalDone)
UserDefaults.standard.set(saveArray, forKey: "test3")

但是当我从 NSUserDefault 获取数组时,我确定它是一个 mutableCopy()。

if UserDefaults.standard.value(forKey: "test3") != nil {
saveArray = UserDefaults.standard.mutableArrayValue(forKey: "test3").mutableCopy() as! NSMutableArray

generalTodos = saveArray[0] as! NSMutableArray
generalDone = saveArray[1] as! NSMutableArray
}

仍然出现同样的错误。也许是愚蠢的想法,但我认为 saveArrays 中的数组仍然不可变。但不知道如何管理它们。你有什么想法?

努力学习swift。请保持礼貌。 -_-

最佳答案

如果你打算使用 Objective-C NSMutableArray,说 as! NSMutableArray 不会做一个;制作 NSMutableArray 的方法是说

let mutableArray = NSMutableArray(array: otherArray)

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

var generalTodos = [String]()

关于swift - 使用 mutableCopy() 将变异方法发送到不可变对象(immutable对象)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42190363/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com