这种奇怪的举动令我感到困惑。我打算用单个数组字段创建一个字典。然后在该数组中,附加两个额外的子字典。这是代码,
var dictionary = [String: Any]()
var array = [[String: Any]]()
dictionary["array"] = array
var dict1:[String:Any] = ["abc": 123, "def": true]
var dict2:[String:Any] = ["111": 1.2345, "222": "hello"]
array.append(dict1)
array.append(dict2)
从调试器输出中可以看出,var数组已成功更新(附加了2个子字典)。但是dictionary["array"]
仍然有0值。
看来(dictionary["array"]
)和(array
)是两个独立的对象
答案 0 :(得分:1)
是的,它们是分开的。元素dictionary["array"]
是类型Array<_>
的不可变值,因为它作为值类型添加到字典而不是引用类型。
如果你试图通过它来封装元素来向数组中添加dict1
,如下所示:
(dictionary["array"] as! Array).append(dict1)
您会看到如下错误:
error: cannot use mutating member on immutable value of type 'Array<_>'
从Swift Language docs开始强调:
值类型是一种类型,当将值分配给变量或常量时,或者将值传递给函数时,将复制该值。
在前几章中,您实际上已经广泛使用了值类型。实际上,Swift整数,浮点数,布尔值,字符串,数组和字典中的所有基本类型都是值类型,并且在幕后实现为结构。