Swift:将数组设置为引用
我希望ClassB的数组能够对ClassA中的数组进行所有更改。Swift:将数组设置为引用,swift,Swift,我希望ClassB的数组能够对ClassA中的数组进行所有更改。 数组总是按值传递吗?array和Dictionary是意向性结构。它们的值语义似乎是一种限制,但这是一种有意的设计选择,旨在限制无意的数据共享。当你有一个数组时,你可以确定它的内容不会因为任何外部原因而改变。这对于防止一整类棘手的bug非常有效,所以我绝对建议您接受它 如果确定没有其他选项,并且需要引用语义,则可以使用结构的引用对应项(例如,对于数组,使用NS(可变)数组)。对于没有类对应的其他结构,可以使用方框,如下面所示 Cl
数组总是按值传递吗?
array
和Dictionary
是意向性结构。它们的值语义似乎是一种限制,但这是一种有意的设计选择,旨在限制无意的数据共享。当你有一个数组时,你可以确定它的内容不会因为任何外部原因而改变。这对于防止一整类棘手的bug非常有效,所以我绝对建议您接受它
如果确定没有其他选项,并且需要引用语义,则可以使用结构的引用对应项(例如,对于数组
,使用NS(可变)数组
)。对于没有类对应的其他结构,可以使用方框,如下面所示
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
类框{
变量内容:T
初始化(uu内容:T){
self.contents=内容
}
}
甲级{
var arrInt=Box([1,2,3])
}
B类{
让我们把箱子装起来
初始化(arrInt:Box){
self.arrInt=arrInt
}
}
设objectA=ClassA()
让objectB=ClassB(objectA.arrInt)
objectA.arrInt.contents.append(4)
打印(objectB.arrInt.contents)
您可以使用NSMutableArray
。因为它是一个类而不是一个结构,所以你会得到你想要的行为。你需要使用var而不是let。这段代码中有很多错误!真是草率的问题。@rmaddy谢谢。NSMutableArray成功了
class Box<T> {
var contents: T
init(_ contents: T) {
self.contents = contents
}
}
class ClassA {
var arrInt = Box([1,2,3])
}
class ClassB {
let arrInt: Box<[Int]>
init(_ arrInt: Box<[Int]>) {
self.arrInt = arrInt
}
}
let objectA = ClassA()
let objectB = ClassB(objectA.arrInt)
objectA.arrInt.contents.append(4)
print(objectB.arrInt.contents)