В следующем примере Playground пользовательский интерфейс корректно обновляется с текущей датой, однако при переходе от страницы и при возврате таймер не возобновляет тиканье:
import SwiftUI
import PlaygroundSupport
struct MainTabView: View {
let timer = Timer.publish(every: 1, on: .main, in: .common)
@State var time = Date()
var body: some View {
TabView {
VStack {
Text("\(time)").onReceive(self.timer) { self.time = $0 }
}
.onAppear { _ = self.timer.connect() }
.tabItem {
Text("Page 1")
}
Text("Page 2").tabItem {
Text("Page 2")
}
Text("Page 3").tabItem {
Text("Page 3")
}
}
}
}
PlaygroundPage.current.setLiveView(MainTabView())
Как мне установить таймер начать обновление, когда страница начнет показываться?
Я видел решения, которые включают обертывание Timer в другом классе, но ничего, что нельзя сделать в View.
Я думал, что вызов в connect()
в onAppear {}
сделает это.