首页 文章

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

提问于
浏览
4

我试图复制一个数组及其值 . 为什么两个数组都引用相同的变量?你可以在游乐场试试这个 .

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,因此复制时它们指向相同的内存位置或相同的引用 . 您的数组 ab 即使是两个单独的数组并且每个包含一个对象,它们也将指向相同的位置 . 当您将标签号分配为2时,它只是覆盖该内存位置的旧号码(参考) .

  • 4

    如果你有一个功能来复制你需要的 UIView ,那么只需使用 map

    var a = [UIView]()
    var b = map (a) { $0.copyTheView() }
    

    在您的情况下,数组 ab 虽然本身不同,但指向相同的视图 . 因此,如果修改 a 中的一个引用,即变量 view ,那么 b 中的引用也将看到修改 .

相关问题