您将如何使用.updateValue()将子词典添加到UserDefaults词典中?

问题描述 投票:-1回答:2

这行代码的语法正确吗?如果不是,那么正确的语法是什么,为什么呢?

UserDefaults.standard.dictionary(forKey: "mainDict")?.updateValue(subDict, forKey: "subDictTitle")

swift dictionary syntax nsuserdefaults
2个回答
0
投票

首先,您必须将Userdefault词典存储到临时词典中。然后,您必须将数据添加到临时字典中。

无需将词典更新为Userdefault。当您使用相同的密钥将Dictionary存储到Usedefault时,它将旧的字典替换为新的字典。

UserDefaults.standard.set(YOUR_TEMPORARY_DICTIONARY, forKey: YOUR_KEY_NAME)

0
投票

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"

© www.soinside.com 2019 - 2024. All rights reserved.