考虑一个简单的 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”时,该变量是通过值传递还是通过引用传递?