将 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
   }