Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在swift中更改嵌套字典中的值_Swift - Fatal编程技术网

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

在swift中更改嵌套字典中的值,swift,Swift,我想知道为什么在设置嵌套字典的值时,包含的字典不反映这些更改?在第3行,是否返回词典副本 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"],

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

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"]
var dic=Dictionary()//第1行
dic[“键”]=“a”:“a”]//第2行
var dic2=dic[“键”]作为字典//第3行
dic2[“a”]=“b”//line4
dic//key:[“a”:“a”],应为[“a”:“b”]

是,在swift结构中,通过值而不是引用传递。换句话说,您将获得一个具有相同值的副本。据我所知,它实际上在引擎盖下进行了一些优化,在你改变某些东西之前,它实际上不会复制。不管怎样,您得到的是字典的一个单独实例


数组也是如此。

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

当你打这个电话的时候

var dic2 = dic["key"] as Dictionary<String, String>

希望这有帮助……

罗曼是正确的,当您创建
dic2
时,因为字典按值传递,所以您正在创建一个新字典

您可以按照概述将词典复制回,也可以就地修改词典:

var dic = [String: [String: String]]() // Dictionary<String, Dictionary<String, String>>()  // line1
dic["key"] = ["a": "a"] // line2
dic["key"]?["a"] = "b"  // line4
var dic=[String:[String:String]]()//字典()//第1行
dic[“键”]=“a”:“a”]//第2行
dic[“键”]?[“a”]=“b”//line4
var dic = [String: [String: String]]() // Dictionary<String, Dictionary<String, String>>()  // line1
dic["key"] = ["a": "a"] // line2
dic["key"]?["a"] = "b"  // line4