gpt4 book ai didi

swift - 导航到其他页面后,如何在 SwiftUI 中恢复已发布的计时器?

转载 作者:行者123 更新时间:2023-12-02 00:05:10 30 4
gpt4 key购买 nike

在下面的 Playground 示例中,UI 会正确更新当前日期,但是当离开页面并返回时,计时器不会继续计时:

  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 中完成。

我认为在 onAppear {} 中调用 connect() 就可以了。

最佳答案

在 onAppear 中重新初始化您的计时器和日期会起作用:

struct ContentView: View {
@State private var 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(perform: {
self.time = Date()
self.timer = Timer.publish(every: 1, on: .main, in: .common)
_ = self.timer.connect()
})
.tabItem {
Text("Page 1")
}

Text("Page 2").tabItem {
Text("Page 2")
}

Text("Page 3").tabItem {
Text("Page 3")
}
}
}
}

关于swift - 导航到其他页面后,如何在 SwiftUI 中恢复已发布的计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60888539/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com