У меня есть состояние, называемое временем

@State var time = 0

И ObservedObject с именем timerWrapper

@ObservedObject var timerWrapper = TimerWrapper()

Time можно обновить из дочернего представления, и я также хочу иметь возможность обновлять его с помощью timerWrapper (theObservedObject), если я использую это:

self.time = self.timerWrapper.remainingSeconds

И сделайте так:

Text($time)

Текст не обновляется. Это работает, только если я сделаю это:

Text(self.timerWrapper.remainingSeconds)

Я знаю, что это потому, что когда будет опубликовано значение Осталось секунд, пользовательский интерфейс будет перезагружен. Но как я могу это обойти? Напоминание, у меня есть 2 возможных источника, которые могут обновлять время, поэтому я не использую наблюдаемый объект напрямую при создании текста в построителе представлений.

1
Eddy 20 Июн 2020 в 22:33

1 ответ

Лучший ответ

Если вы хотите обновить локальное состояние в опубликованном свойстве модели представления (по какой-либо причине), вот способ сделать это

Text(time)   // << not binding, just property
   .onReceive(timerWrapper.$remainingSeconds) { value in // listen for publisher $
      self.time = value
   }
1
Asperi 21 Июн 2020 в 04:25