【问题标题】:SwiftUI @EnvironmentObejct can't seem update valuesSwiftUI @EnvironmentObejct 似乎无法更新值
【发布时间】:2020-09-11 22:17:58
【问题描述】:

我正在尝试使用 @EnvironmentObject 来更新 ViewModel 中的布尔值。因此,当我导航回原始屏幕时,我希望布尔值发生变化,从而改变文本。也用 ObservedObject 试过这个。这不起作用或找不到 ContentView 在更改时重绘自身的方法。

import SwiftUI

class Global: ObservableObject {

    @Published var change = [false, false]

}

struct ContentView: View {
    var body: some View {

        NavigationView {
            VStack {
                NewView().environmentObject(Global())
            }
        }
    }
}

struct NewView: View {

    @EnvironmentObject var env: Global

    var body: some View {

        Text(env.change[1] ? "WORKS" : "DOESNT WORK")
        NavigationLink(destination: ChangeThis().environmentObject(Global())) {
            Text("Push Me to Change")
        }
    }
}

struct ChangeThis: View {

    @EnvironmentObject var env: Global

    var body: some View {
        Button(action: {
            env.change[0] = true
            env.change[1] = true
        }) {
            Text(" Want this to Changes the Boolean values in Global and update NewView with those values after clicking back")
        }
    }
}

【问题讨论】:

    标签: swiftui swiftui-navigationlink swiftui-environment


    【解决方案1】:

    您需要在所有视图中使用 Global EnvironmentObject 的相同实例:

    struct NewView: View {
        @EnvironmentObject var env: Global
        ...
        // pass the already-existing instance, don't create a new one
        NavigationLink(destination: ChangeThis().environmentObject(env) 
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-11
      • 1970-01-01
      • 2018-08-05
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      相关资源
      最近更新 更多