这行代码的语法正确吗?如果不是,那么正确的语法是什么,为什么呢?
UserDefaults.standard.dictionary(forKey: "mainDict")?.updateValue(subDict, forKey: "subDictTitle")
首先,您必须将Userdefault词典存储到临时词典中。然后,您必须将数据添加到临时字典中。
无需将词典更新为Userdefault。当您使用相同的密钥将Dictionary存储到Usedefault时,它将旧的字典替换为新的字典。
UserDefaults.standard.set(YOUR_TEMPORARY_DICTIONARY, forKey: YOUR_KEY_NAME)
updateValue(_:forKey:)
是字典的mutating实例方法,这意味着它将更新字典的值。显然,为了变异实例,它必须是可变的,在调用updateValue(_:forKey:)
时就是这种情况。即使您这样做:
UserDefaults.standard.dictionary(forKey: "mainDict")
在用户默认值中设置的词典的值不会更改,因为简单地为澄清起见,它类似于实现:let myDict = ["k1": "Hello"] UserDefaults.standard.register(defaults: ["myDict": myDict]) var mutable = UserDefaults.standard.dictionary(forKey: "myDict")! mutable["k1"] = "HEY" print(UserDefaults.standard.dictionary(forKey: "myDict")) // Optional(["k1": Hello])
是它的copy
。
mutable
产生错误的表达式不可分配:函数调用返回不可变值
UserDefaults.standard.register(defaults: ["k2": "this is my string"])
UserDefaults.standard.string(forKey: "k2") = "new string"