引用成员变量作为Swift中的类成员

时间:2014-07-29 13:29:07

标签: ios class reference swift

我想创建一个类,其成员作为引用或指针。

这是我的代码

class A {
    var arr = [Int]()

    func fill() {
        arr += 2
    }
}

class B {
    var arr = [Int]()

    func fill() {
        arr += 3
    }
}


var arr = [1]

var a = A()
a.arr = arr
a.fill()

var b = B()
b.arr = arr
b.fill()

println("\(arr) -- \(a.arr) -- \(b.arr)")

输出为[1] -- [1, 2] -- [1, 3],我想获得[1, 2, 3] -- [1, 2, 3] -- [1, 2, 3]

我试图在我的课程中添加一个带有inout参数的setter,但我得到的结果相同......

2 个答案:

答案 0 :(得分:3)

class A {
    var myC : C?;

    func fill(inout a:[Int]) {
        a += 2
    }

    func updateC(c : C) {
        fill(&c.arr)
        myC = c;
    }
}

class B {
    var myC : C?;

    func fill(inout a:[Int]) {
        a += 3
    }

    func updateC(c : C) {
        fill(&c.arr)
        myC = c;
    }
}


class C {
    var arr = [Int]()

}

在另一个班级:

var c = C()
c.arr = [1]

var a = A()
a.updateC(c)

var b = B()
b.updateC(c)

println("\(c.arr) -- \(a.myC!.arr) -- \(b.myC!.arr)")

它应该打印相同的值。

答案 1 :(得分:2)

Swift Arrays是按值传递的,因此如果没有一些重复,它们就不会真正以这种方式工作。您也可以尝试使用NSMutableArray,您可以通过引用传递它,但它有自己的缺点,例如只保存AnyObjects。

class A {
    var arr = NSMutableArray()

    func fill() {
        arr.addObject(2)
    }
}

class B {
    var arr = NSMutableArray()

    func fill() {
        arr.addObject(3)
    }
}

var arr: NSMutableArray = [1]

var a = A()
a.arr = arr
a.fill()

var b = B()
b.arr = arr
b.fill()

println("\(arr) -- \(a.arr) -- \(b.arr)")