SwiftUI @EnvironmentObejct는 업데이트 값으로 보일 수 없습니다.

Sep 12 2020

@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")
        }
    }
}

답변

pawello2222 Sep 12 2020 at 05:28

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) 
    ...
}