问题
I have a state called time
@State var time = 0
and an ObservedObject called timerWrapper
@ObservedObject var timerWrapper = TimerWrapper()
time can be updated from a child view and I want to be also able to update it using the timerWrapper (theObservedObject), if I use this:
self.time = self.timerWrapper.remainingSeconds
and do this:
Text($time)
The text doesn’t update. It only works if I do this:
Text(self.timerWrapper.remainingSeconds)
I know that’s because when remainingSeconds is published it will reload the UI. But how can I get around this? Reminder I have 2 possible sources that can updated time, this is why I’m not using the observed object directly when creating the Text in the viewbuilder.
回答1:
If you want to update local state on view model published property (for whatever reason), here is a way to do this
Text(time) // << not binding, just property
.onReceive(timerWrapper.$remainingSeconds) { value in // listen for publisher $
self.time = value
}
来源:https://stackoverflow.com/questions/62490734/assigning-an-observedstate-s-published-value-to-a-state