iOS Swift 更新数组中的字典

iOS Swift Updating Dictionary In An Array

我在字典中有一组字典。我这样初始化它:

var fillups:[NSMutableDictionary] = []

然后我这样加载它:

fillups = userDefaults.object(forKey: car) as! NSArray as! [NSMutableDictionary]

然后,当我尝试更新数组中的字典元素时,出现 "mutating method sent to immutable object" 错误。这是我更新记录的代码:

let dict=fillups[row]
dict.setValue(odometerField.text, forKey: "odometer")
dict.setValue(gallonsField.text, forKey: "gallons")
fillups[row]=dict

错误发生在我的第一个 setValue 行。

如果你想改变你的字典,你需要用'var'而不是'let'来声明它; 'let' 用于常量。同时修复评论指出的解包问题

let dict=fillups[row]

应该是

var dict=fillups[row]

您从 NSUserDefaults 检索的对象是不可变的,即使它们在插入时是可变的。您需要获取从默认值获得的不可变对象并创建它们的可变版本。如果您不想让您的应用程序崩溃,您也不应该在任何地方强制解包。

if let array = userDefaults.object(forKey: car) as? [NSDictionary] {
    fillups = array.map { ([=10=].mutableCopy() as! NSMutableDictionary) }
}

您也不需要 fillips[row] = dict 行,因为 NSMutableDictionary 是一种引用类型,并且编辑您从数组中提取的引用已经在编辑数组中的引用。