我想创建一个类,其成员作为引用或指针。
这是我的代码
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,但我得到的结果相同......
答案 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)")