SwiftUI @EnvironmentObejct似乎无法更新值

问题描述

我正在尝试使用@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")
        }
    }
}

enter image description here

解决方法

您需要在所有视图中使用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) 
    ...
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...