Swift:将数组设置为引用

时间:2018-01-10 05:49:34

标签: swift

ClassA {
    let arrInt = [1,2,3]
}

ClassB {
    var arrInt: [Int]?

    func init(_ arrIntTmp: [Int]) {
        arrInt = arrIntTmp
    }

    func print() {

    }
}

let classA = ClassA()
let classB = ClassB(classA.arrInt)
classA.arrInt.append(4)
classB.print() // expects to print 1 2 3 4 but up to 3 only

我希望ClassB数组能够在ClassA中对数组进行所有更改。 数组总是按值传递吗?

1 个答案:

答案 0 :(得分:2)

ArrayDictionary intentially 结构。它们的价值语义似乎是一种限制,但它是一种有意的设计选择,可以限制无意的数据共享。如果您拥有Array,则可以确定其内容永远不会因任何原因而改变。这对于防止整个类别的棘手错误非常有效,所以我肯定会建议你接受它。

如果您某些您没有其他选项,并且您需要引用语义,那么您可以使用结构的引用副本(例如NS(Mutable)Array for { {1}})。对于没有类对应的其他结构,您可以使用Box,就像我在下面演示的那样。

Array
相关问题