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
是一种引用类型,并且编辑您从数组中提取的引用已经在编辑数组中的引用。
我在字典中有一组字典。我这样初始化它:
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
是一种引用类型,并且编辑您从数组中提取的引用已经在编辑数组中的引用。