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?
2 回答
2
由于Swift中的Array是值类型,因此当您复制它时将创建一个单独的副本 . 但由于UIView是引用类型而您的数组包含UIViews,因此复制时它们指向相同的内存位置或相同的引用 . 您的数组 a 和 b 即使是两个单独的数组并且每个包含一个对象,它们也将指向相同的位置 . 当您将标签号分配为2时,它只是覆盖该内存位置的旧号码(参考) .
4
如果你有一个功能来复制你需要的 UIView ,那么只需使用 map
var a = [UIView]()
var b = map (a) { $0.copyTheView() }
在您的情况下,数组 a 和 b 虽然本身不同,但指向相同的视图 . 因此,如果修改 a 中的一个引用,即变量 view ,那么 b 中的引用也将看到修改 .
2 回答
由于Swift中的Array是值类型,因此当您复制它时将创建一个单独的副本 . 但由于UIView是引用类型而您的数组包含UIViews,因此复制时它们指向相同的内存位置或相同的引用 . 您的数组
a
和b
即使是两个单独的数组并且每个包含一个对象,它们也将指向相同的位置 . 当您将标签号分配为2时,它只是覆盖该内存位置的旧号码(参考) .如果你有一个功能来复制你需要的
UIView
,那么只需使用map
在您的情况下,数组
a
和b
虽然本身不同,但指向相同的视图 . 因此,如果修改a
中的一个引用,即变量view
,那么b
中的引用也将看到修改 .