У меня есть состояние, называемое временем
@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 ответ
Если вы хотите обновить локальное состояние в опубликованном свойстве модели представления (по какой-либо причине), вот способ сделать это
Text(time) // << not binding, just property
.onReceive(timerWrapper.$remainingSeconds) { value in // listen for publisher $
self.time = value
}
Похожие вопросы
Связанные вопросы
Новые вопросы
swiftui
SwiftUI - это способ создания пользовательских интерфейсов на всех платформах Apple. Создавайте пользовательские интерфейсы для любого устройства Apple, используя один набор инструментов и API. Благодаря декларативному синтаксису Swift, который легко читать и естественно писать, SwiftUI легко работает с инструментами проектирования Xcode, обеспечивая идеальную синхронизацию вашего кода и дизайна. Автоматическая поддержка динамического типа, темного режима, локализации и специальных возможностей. Используйте этот тег для вопросов о SwiftUI на любой платформе.