-2

考虑一个简单的 SwiftUI 类来实现倒数计时器:

class Stopwatch: ObservableObject {
 
    @Published var counter: Int = 0
    var timer = Timer()
    
    func start() {
        self.timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
            self.counter += 1
        }
    }
}

我在一个带有“开始”按钮的简单视图中创建了这个秒表的一个实例。在这个视图中,还有一个按钮(导航链接)可以移动到第二个屏幕。我将秒表类的实例传递到第二个屏幕。

struct ContentView: View {
    
    @ObservedObject var stopwatch = Stopwatch()
    
    var body: some View {
        NavigationView {
            VStack {
                Text("Counter: \(self.stopwatch.counter) ")
                Button(action: {
                    self.stopwatch.start()
                }) {
                    Text("Start")
                }
                NavigationLink(destination: Screen2(stopwatch: stopwatch)) {
                    Text("Next screen")
                }
            }
        }
    }
}

这是第二个屏幕:

struct Screen2: View {
    @ObservedObject var stopwatch: Stopwatch
    
    var body: some View {
        VStack {
            Button(action: {
                self.stopwatch.stop()
            }) {
                Text("Stop")
            }
            
            Text("\(self.stopwatch.counter)")
        } 
    }
}

这一切都很好。在第一个屏幕上启动秒表后,如果我移至第二个屏幕,秒表将继续更新第二个屏幕中的文本视图。

新手问题:当“ContentView”中的“秒表”变量通过 NavigationLink 视图传递给“Screen2”时,该变量是通过值传递还是通过引用传递?

4

1 回答 1

0

参考。因为 StopWatch 是一个类。

注释,例如;@ObservedObject,除非另有说明,否则不要发挥作用,例如;$操作员。

于 2020-07-07T06:17:50.607 回答