GrandSteph
GrandSteph

Reputation: 2281

How to increment a published var when accessed

I'm trying to setup some kind of global counter in my app. What the best way of doing this?

I have the following code that works but it's damn ugly, I'd like to increment when the var is accessed so I don't have to call the function.

I tried to use get and set but it's not possible with property wrappers.

class GlobalDisplayInfo: ObservableObject {

    @Published var nextAvailableInt : Int = 0

    func getNextAvailableInt() -> Int {
        nextAvailableInt += 1
        return self.nextAvailableInt
    }
}

Upvotes: 0

Views: 107

Answers (2)

Cuneyt
Cuneyt

Reputation: 991

What you want to achieve is not possible as it is against how Published works.

Let's say you access the published var in two places:

When the first one accesses the var, it would increment the var which would require the second place where it uses this var to refresh (access to this var again) which would require the var to increment again which would require the other place which uses this var to access and it just goes on - I think you got the point.

Your problem basically sounds rather like a design problem and I suggest you review it. Also, I think it'd be better if you just tell us what you want to achieve (without using any coding language, just a plain explanation of what you want) then an answer might come up.

Upvotes: 1

Asperi
Asperi

Reputation: 258345

It is not clear the usage, but looks like you need the following

class GlobalDisplayInfo: ObservableObject {

    private var _nextAvailableInt = 0
    var nextAvailableInt : Int {
        _nextAvailableInt += 1
        return _nextAvailableInt
    }
}

Upvotes: 0

Related Questions