【问题标题】:Modifying array items in Swift [duplicate]在 Swift 中修改数组项
【发布时间】:2016-03-28 22:09:43
【问题描述】:

我在 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]]

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

【问题讨论】:

    标签: arrays swift swift2.2


    【解决方案1】:

    如何在 swift 中引用/传递/复制数组是很多争论的焦点,请查看 this link

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

    【讨论】:

    • 也就是说,它对所有内容进行了深层复制?
    猜你喜欢
    • 1970-01-01
    • 2018-02-07
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 2021-10-14
    相关资源
    最近更新 更多