Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:将数组设置为引用_Swift - Fatal编程技术网

Swift:将数组设置为引用

Swift:将数组设置为引用,swift,Swift,我希望ClassB的数组能够对ClassA中的数组进行所有更改。 数组总是按值传递吗?array和Dictionary是意向性结构。它们的值语义似乎是一种限制,但这是一种有意的设计选择,旨在限制无意的数据共享。当你有一个数组时,你可以确定它的内容不会因为任何外部原因而改变。这对于防止一整类棘手的bug非常有效,所以我绝对建议您接受它 如果确定没有其他选项,并且需要引用语义,则可以使用结构的引用对应项(例如,对于数组,使用NS(可变)数组)。对于没有类对应的其他结构,可以使用方框,如下面所示 Cl

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

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)