开发者社区> 问答> 正文

SwiftUI:取消计时器后如何重新启动计时器?

我有一个导航视图,其中包括内容视图和一个TimerView...TimerView有一个计时器,它可以正确地递增,也可以在我调用时正确停止。self.timer.upstream.connect().cancel().

然而,当我返回到ContentView,然后再次导航到TimerView时,我希望计时器再次开始计数,但是这种情况不会发生。secondsElapsed会重置为0,但计时器不会运行。

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: TimerView()) {
                Text("Go to Timer View")
            }
        }
    }
}

struct TimerView: View {
    @State var secondsElapsed = 0
    var timer = Timer.publish (every: 1, on: .main, in: .common).autoconnect()
    var body: some View {
        VStack {
            Text("\(self.secondsElapsed) seconds elapsed")
            Button("Stop timer",
                   action: {
                    self.timer.upstream.connect().cancel()
            })
        }.onReceive(timer) { _ in
            self.secondsElapsed += 1
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

展开
收起
游客5akardh5cojhg 2019-12-09 14:01:16 1285 0
1 条回答
写回答
取消 提交回答
  • 尝试在viewDidampar()中调用您的计时器。

    如果您不熟悉viewDidampar(),请检查以下内容https://developer.apple.com/documentation/uikit/uiviewcontroller/1621423-viewdidappear

    无论何时在视图控制器上来回切换,该函数都将被触发。

    2019-12-09 14:01:42
    赞同 展开评论 打赏
问答分类:
Go
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载