SwiftUI-更新@EnvironmentObject不会更新UI

时间:2020-07-03 22:48:11

标签: ios xcode environment-variables swiftui

我正在尝试使用Bool更新名为AppState的@EnvironmentObject,该Bool指示正在发生某些过程并显示在活动指示器中。 在下面的代码中,我在viewModel中调用一个方法来登录用户。在调用login()之前,我更新了appState的“ isWaiting”属性,该属性传递到活动指示器类中,并且微调器显示在父视图上。当登录方法返回时,我将prop设置为false以杀死微调器。

enum

但是,它不起作用...我可以让微调器显示是否注释掉闭包内部的行以将其设置为false,但是当我取消注释时,什么也没显示(但是两行都在debug中命中了)模式) 我做错了任何明显的明显事情吗?

这是AppState类:

Button(action: {
                        self.loginViewModel.username = self.username
                        self.loginViewModel.password = self.password
                        
                        self.appState.isWaiting = true
                        
                        self.loginViewModel.login() { token in
                            if !token.isEmpty {
                                self.userToken = token
                            }
                            
                            self.appState.isWaiting = false
                        }
                    }) {
                        Text("Log in")
                            .bold()
                            .frame(maxWidth: .infinity)
                            .padding()
                            .foregroundColor(.white)
                    }

}

在父视图中,我将其设置为@EnvironmentObject var

class AppState: ObservableObject {
@Published var isHidden: Bool = false
@Published var isWaiting: Bool = false

在LoginDrawerView中,它是ChooserView的子级,我引用了AppState

struct ChooserView: View {
@ObservedObject var homeState: AppState
}
    .edgesIgnoringSafeArea([.bottom, .top])
    .environmentObject(homeState)

在同一视图中,我调用了viewModel的login()方法,这是我上面粘贴的代码。如果不在这里重新创建整个应用程序,我不确定还能提供什么来重新创建它。任何帮助表示赞赏。

0 个答案:

没有答案