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中对数组进行所有更改。 数组总是按值传递吗?
答案 0 :(得分:2)
Array
和Dictionary
是 intentially 结构。它们的价值语义似乎是一种限制,但它是一种有意的设计选择,可以限制无意的数据共享。如果您拥有Array
,则可以确定其内容永远不会因任何原因而改变。这对于防止整个类别的棘手错误非常有效,所以我肯定会建议你接受它。
如果您某些您没有其他选项,并且您需要引用语义,那么您可以使用结构的引用副本(例如NS(Mutable)Array
for { {1}})。对于没有类对应的其他结构,您可以使用Box,就像我在下面演示的那样。
Array