Swift 4.1:字典中的数组未更新

时间:2018-04-19 01:32:45

标签: swift4.1

这种奇怪的举动令我感到困惑。我打算用单个数组字段创建一个字典。然后在该数组中,附加两个额外的子字典。这是代码,

    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)

Debugger output

enter image description here

从调试器输出中可以看出,var数组已成功更新(附加了2个子字典)。但是dictionary["array"]仍然有0值。

看来(dictionary["array"])和(array)是两个独立的对象

1 个答案:

答案 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整数,浮点数,布尔值,字符串,数组和字典中的所有基本类型都是值类型,并且在幕后实现为结构。