我有一个非常简单的应用程序,其中包含两个用NavigationLink
捆绑在一起的视图。在第一个视图ContentView
中,我可以按预期看到对ObservedObject
的更新。但是,当我转到下一个View
时,似乎基于ObservedObject
的代码无法识别更改。
ContentView.swift(工作视图):
import SwiftUI
struct ContentView: View {
@ObservedObject var toggleObject = ToggleObject()
var body: some View {
NavigationView {
VStack(spacing: 15) {
Toggle(isOn: self.$toggleObject.isToggled) {
Text("Toggle:")
}
if self.toggleObject.isToggled == true {
Text("ON")
}
else {
Text("OFF")
}
NavigationLink(destination: ShowToggleView()) {
Text("Show Toggle Status")
}
}
}
}
}
ShowToggleView.swift(该视图的行为不符合我的预期):
import SwiftUI
struct ShowToggleView: View {
@ObservedObject var toggleObject = ToggleObject()
var body: some View {
Form {
Section {
if self.toggleObject.isToggled {
Text("Toggled on")
}
else {
Text("Toggled off")
}
}
}
}
}
所有这些数据都存储在一个简单的文件ToggleObject.swift中:
import SwiftUI
class ToggleObject: ObservableObject {
@Published var isToggled = false
}
当我在第一个View
中打开它时,会看到预期的文本“ ON”,但是当我进入下一个视图时,无论我在第一个{ {1}} ...为什么?
使用Xcode 11.5和Swift 5
答案 0 :(得分:1)
您几乎在做所有正确的事情。但是,您正在第二个视图中创建ToggleObject()
的另一个实例,该实例将覆盖数据。您基本上只创建一个ObservedObject,然后将其传递到子视图,这样它们都可以访问相同的数据。
将其更改为此:
struct ShowToggleView: View {
@ObservedObject var toggleObject : ToggleObject
然后在导航链接中将对象传递到该视图...
NavigationLink(destination: ShowToggleView(toggleObject: self.toggleObject)) {
Text("Show Toggle Status")
}