SwiftUI 通过导航视图中的视图共享计时器

SwiftUI sharing timer through views in navigation view

我是 SwiftUI 的新手。 我想制作一个应用程序,在导航视图中浏览不同的视图,并在后台 运行 计时器显示每个视图的时间。 问题是当我导航到二级导航时。当计时器打开时,应用程序 returns 自动返回到上一个导航视图。 这是我的意思的屏幕截图视频: https://youtu.be/eXbK9jpluvk

这是我的代码:

导入 SwiftUI

结构内容视图:视图{

@State var timer = Timer.publish(every: 1,  on: .main, in: .common).autoconnect()
@State var seconds : Int = 0
@State var paused : Bool = true

var body: some View {
    
    
    VStack {
        Text("\(seconds)")
        Button(action: {
            paused.toggle()
        }) {
            Image(systemName: paused ? "play.fill" : "stop.fill")
        }
        NavigationLink(destination: FirstView( timerSeconds: $seconds, timerPaused: $paused)) {
            Text("Navigate 1")
        }.padding()
    }
    .onReceive(self.timer) { currentTime in
        if !paused {
            seconds = seconds + 1
            print(currentTime)
        }
    }
    .navigationViewStyle(.stack)
    
}

}

构造 FirstView:视图 {

@Binding var timerSeconds : Int
@Binding var timerPaused : Bool

var body: some View {
    
        VStack {
            Text("First View")
            Text("\(timerSeconds)")
            Button(action: {
                timerPaused.toggle()
            }) {
                Image(systemName: timerPaused ? "play.fill" : "stop.fill")
            }
            NavigationLink(destination: SecondView(seconds: $timerSeconds)) {
                Text("Navigate 2")
            }
        }
    
}

}

构造 SecondView:视图 {

@Binding var seconds : Int

var body: some View {
    Text("\(seconds)")
}

}

欢迎任何帮助!! 非常感谢

NavigationView只能推送一个细节NavigationLink所以要有更多的层次你需要在导航上设置.isDetailLink(false) on the link. Alternatively, if you don't expect to run in landscape split view, you could set .navigationViewStyle(.stack)