【问题标题】:How to update ParentView after updating SubView @ObservedObject SwiftUI更新 SubView @ObservedObject SwiftUI 后如何更新 ParentView
【发布时间】:2020-12-02 03:27:13
【问题描述】:

这是一个简单的例子。 我有一个@ObservedObject viewModel (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
    }
}


【问题讨论】:

    标签: ios swift swiftui observableobject observedobject


    【解决方案1】:

    这是可能的解决方案:

        var body: some View {
            NavigationView {
                VStack {
                    Text("\(object1.object2.n)")
                       .onChange(of: object1.object2.n) { _ in
                           object1.objectWillChange.send()
                       }
    
    // .. other code
    

    另一种方法是将每个 object2 相关部分移动到显式观察 object2 的单独子视图中。

    【讨论】:

    • 我刚刚在 Xcode 12.1 和 iOS 14.1 中尝试过,仍然没有任何变化。我正在寻找适用于 iOS 13 的解决方案。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 2022-10-19
    • 2020-10-22
    相关资源
    最近更新 更多