【问题标题】:Assigning an ObservedState’s published value to a state将 ObservedState 的已发布值分配给状态
【发布时间】:2020-06-20 19:33:12
【问题描述】:

我有一个叫做时间的状态

@State var time = 0

还有一个名为 timerWrapper 的 ObservedObject

@ObservedObject var timerWrapper = TimerWrapper()

时间可以从子视图更新,如果我使用这个,我也希望能够使用 timerWrapper (theObservedObject) 更新它:

self.time = self.timerWrapper.remainingSeconds

然后这样做:

Text($time)

文本没有更新。仅当我这样做时才有效:

Text(self.timerWrapper.remainingSeconds)

我知道这是因为当剩余秒数发布时,它会重新加载 UI。 但我怎样才能解决这个问题?提醒我有 2 个可能的来源可以更新时间,这就是为什么我在视图构建器中创建文本时不直接使用观察对象。

【问题讨论】:

  • 决定谁“拥有”这些数据。并更新相同的来源。有没有理由不能将self.$timeWrapper.remainingSeconds 绑定传递给子视图?为什么需要@State var time?
  • @NewDev 是的,它有效!嗯......但想知道这是否是最好的方法
  • 如果你有外部的东西可以改变状态,最好使用视图模型,即ObservedObject作为视图的真实来源。

标签: swiftui state observableobject observedobject


【解决方案1】:

如果您想更新视图模型发布属性的本地状态(无论出于何种原因),这里有一种方法可以做到这一点

Text(time)   // << not binding, just property
   .onReceive(timerWrapper.$remainingSeconds) { value in // listen for publisher $
      self.time = value
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-22
    • 2019-12-31
    • 2021-01-03
    • 1970-01-01
    • 2015-07-16
    • 2019-07-23
    • 1970-01-01
    • 2022-09-30
    相关资源
    最近更新 更多