Igor Ševtšenko
Igor Ševtšenko

Reputation: 142

2 instances of 1 class don't share their property

I have 2 classes(A,B) that have instances of another class(C) as their property. Class C have property with some values(no matter what type). A class have methods that removes and append objects from/to C. B class have method that returns objects from class C. Now classes A and B have their views, on A view user able to append and remove object from C and view updates everytime when C changes, and view B call B class method when appear to load object from C, but method returns 0 objects.Here is code example:

class C{
    var property = [Something]
}

class A{
    var c = C()
    func appendOrremove(){
        //... some action
    }
}
class B{
    var c = C()
    func getProperty()->[Something]{
        //... return property of c
    }
}

I can provide exact my code where I faced the problem, but it will much more code than above.Thanks in advance!

Okey I better show my code

    class FavoriteBeers{
        var favoriteBeers = [Beer]()
    }


    class BeersListInteractor:BeersListInteractorProtocol{
        private var favoriteBeers = FavoriteBeers()
        func addToFavorites(beer: Beer){
            favoriteBeers.favoriteBeers.append(beer)
            saveFavoriteBeers()
        }
        func removeFromFavorites(_ beer: Beer) {
            favoriteBeers.favoriteBeers.removeAll { $0 == beer } 
            saveFavoriteBeers()
        }
    }


class FavoriteBeersInteractor:FavoriteBeersInteractorProtocol{
    private var favoriteBeers = FavoriteBeers()
    func getFavoriteBeers()-> [Beer]{
        return favoriteBeers.favoriteBeers
    }
}

Upvotes: 0

Views: 46

Answers (1)

Phillip Mills
Phillip Mills

Reputation: 31016

You don't show how objects of the A and B classes are related but that will be important for how they share the c object. Here's a playground example that would work if something else controls A and B instances.

class Something{
}
class C{
    var property = [Something()]
}
class A{
    var c: C?
    func appendOrremove(){
    }
}
class B{
    var c: C?
    func getProperty()->[Something]{
        return c?.property ?? []
    }
}

let exC = C()
let exA = A()
exA.c = exC
let exB = B()
exB.c = exC

Another common situation would have A objects create B objects. In that case you might want classes defined something like:

class A{
    var c = C()
    var b: B
    init() {
        b = B(c)
    }
    func appendOrremove(){
    }
}
class B{
    var c: C
    init(_ inC: C) {
        c = inC
    }
    func getProperty()->[Something]{
        return c.property
    }
}

Upvotes: 2

Related Questions