这是我的案例的一个简单示例。我有一个@ObservedObject视图模型(Object1(,将属性(Object2(传递给另一个视图(View2(。更改视图2中的值,当我返回到视图1时,我希望该值也更新。什么是最好的解决方案?
在本例中,当我按下蓝色数字时,我希望黑色数字也会更新。实际上我不知道为什么按下按钮"后黑色数字会更新;显示";。如果你能帮我,我将不胜感激。谢谢。
import SwiftUI
import Combine
struct ContentView: View {
@ObservedObject var object1: Object1 = Object1(ob: Object2(n: 0))
@State var isShow = false
var body: some View {
NavigationView {
VStack {
Text("(object1.object2.n)")
//NavigationLink(destination: View2(object2: object1.object2)) {
// Text("Go to view 2")
//}
View2(object2: object1.object2)
Button {
isShow = true
} label: {
Text("Show")
}.alert(isPresented: $isShow, content: {
Alert(title: Text("(object1.object2.n)"))
})
}
}
}
}
struct View2: View {
@ObservedObject var object2: Object2
var body: some View {
Button {
object2.n += 1
} label: {
Text("(object2.n)")
}
}
}
class Object1: ObservableObject {
@Published var object2: Object2
init(ob: Object2) {
self.object2 = ob
}
}
class Object2: ObservableObject {
@Published var n: Int = 0
init(n: Int) {
self.n = n
}
}
以下是可能的解决方案:
var body: some View {
NavigationView {
VStack {
Text("(object1.object2.n)")
.onChange(of: object1.object2.n) { _ in
object1.objectWillChange.send()
}
// .. other code
备选方案是将每个与object2
相关的部分明确地移动到观察到的object2
的分离子视图中。