在swift中更改嵌套字典中的值

Mat*_*ung 6 swift

我想知道为什么在设置嵌套字典的值时,包含字典不反映这些更改?在line3上,是返回的字典的副本?

var dic = Dictionary<String, AnyObject>()  // line1
dic["key"] = ["a":"a"] // line2
var dic2 = dic["key"] as Dictionary<String, String> // line3
dic2["a"] = "b" // line4
dic // key : ["a":"a"], would expect ["a":"b"]
Run Code Online (Sandbox Code Playgroud)

Aar*_*sen 10

这是因为字典是值类型而不是Swift中的引用类型.

当你拨打这一行时......

var dic2 = dic["key"] as Dictionary<String, String>
Run Code Online (Sandbox Code Playgroud)

...你正在创建一个全新的字典,而不是对其中的值的引用dic.变化dic2不会反映出来dic,因为dic2现在是第二个完全独立的字典.如果要dic反映所做的更改,则需要将值重新分配给相应的键dic,如下所示:

dic["key"] = dic2
Run Code Online (Sandbox Code Playgroud)

希望有帮助......