将 ObservedState 的发布值分配给状态
Assigning an ObservedState’s published value to a state
我有一个叫时间的状态
@State var time = 0
和一个名为 timerWrapper 的 ObservedObject
@ObservedObject var timerWrapper = TimerWrapper()
时间可以从子视图更新,我也希望能够使用 timerWrapper (theObservedObject) 更新它,如果我使用这个:
self.time = self.timerWrapper.remainingSeconds
然后这样做:
Text($time)
文字没有更新。只有我这样做才有效:
Text(self.timerWrapper.remainingSeconds)
我知道那是因为发布 remainingSeconds 时它会重新加载 UI。
但是我怎样才能解决这个问题呢?提醒我有 2 个可能的来源可以更新时间,这就是为什么我在 viewbuilder 中创建文本时不直接使用观察到的对象。
如果您想在已发布的视图模型上更新本地状态 属性(无论出于何种原因),这里有一种方法可以做到这一点
Text(time) // << not binding, just property
.onReceive(timerWrapper.$remainingSeconds) { value in // listen for publisher $
self.time = value
}
我有一个叫时间的状态
@State var time = 0
和一个名为 timerWrapper 的 ObservedObject
@ObservedObject var timerWrapper = TimerWrapper()
时间可以从子视图更新,我也希望能够使用 timerWrapper (theObservedObject) 更新它,如果我使用这个:
self.time = self.timerWrapper.remainingSeconds
然后这样做:
Text($time)
文字没有更新。只有我这样做才有效:
Text(self.timerWrapper.remainingSeconds)
我知道那是因为发布 remainingSeconds 时它会重新加载 UI。 但是我怎样才能解决这个问题呢?提醒我有 2 个可能的来源可以更新时间,这就是为什么我在 viewbuilder 中创建文本时不直接使用观察到的对象。
如果您想在已发布的视图模型上更新本地状态 属性(无论出于何种原因),这里有一种方法可以做到这一点
Text(time) // << not binding, just property
.onReceive(timerWrapper.$remainingSeconds) { value in // listen for publisher $
self.time = value
}