修改Swift

时间:2016-03-28 22:09:44

标签: arrays swift swift2.2

我在Swift中发现了一些非常奇怪的行为。这是代码:

var array2d: [[Int]] = [[1]]
print(array2d) // prints [[1]]

var first = array2d[0]
first.append(2)

print(array2d) // still prints [[1]]!!!

我完全希望最后一行打印[[1, 2]]。我无法解释目前的行为。我希望array2d[0]返回对第一个项目的引用,或者可能是该引用的副本。在任何一种情况下,修改该对象都应该修改array2d。但那不是正在发生的事情。

但是,如果我像这样更新数组:

array2d[0].append(2)

然后按预期打印[[1, 2]]

有人可以帮我解释一下吗?

1 个答案:

答案 0 :(得分:1)

如何在swift中引用/传递数组是一个很大的争论点,请看this link

实质上发生的事情是var first = array2d[0]正在该索引处获取数组的副本,而不是像您期望的那样创建引用。因此,使用下标符号访问数组允许您正确地更改数组,但不创建新变量。