Reputation: 998
I want to create a class with a member working as a reference or a pointer.
Here is my code
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)")
The output is [1] -- [1, 2] -- [1, 3]
and I want to get [1, 2, 3] -- [1, 2, 3] -- [1, 2, 3]
I have tried to add a setter with an inout
parameter to my classes but I get the same result...
Upvotes: 0
Views: 2495
Reputation: 64644
Swift Arrays are pass by value so they don't really work that way without some finagling. You could also try using NSMutableArray, which you can pass by reference, but that has its own drawbacks such as only holding 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)")
Upvotes: 2
Reputation: 15784
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]()
}
and in another class:
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)")
It should print the same values.
Upvotes: 3