Swift - 如何复制包含引用类型的数组

duy*_*yen 5 arrays swift

我正在尝试复制数组及其值。为什么两个数组都引用同一个变量?您可以在 Playground 中尝试此操作。

var view = UIView()
view.tag = 1

var a = [UIView]()
var b = [UIView]()

a.append(view)

b = a
view.tag = 2

a[0].tag // value is 2
b[0].tag // value is 2?
Run Code Online (Sandbox Code Playgroud)

Ami*_*t89 4

由于 Swift 中的 Array 是值类型,因此当您复制时,它将创建一个单独的副本。但由于 UIView 是引用类型并且您的数组包含 UIView,因此在复制时它们指向相同的内存位置或相同的引用。您的数组ab即使两个单独的数组 和 各自包含一个对象,它们也会指向相同的位置。当您将标签编号指定为 2 时,它只是覆盖该内存位置(参考)的旧编号。