gpt4 book ai didi

ios - 为什么更新可观察对象中的变量不更新 View ?

转载 作者:行者123 更新时间:2023-11-28 13:23:42 24 4
gpt4 key购买 nike

我是 SwiftUI 的新手。学习新属性,例如@State、@Binding、@EnvironmentObject 等。

我目前正在处理登录模板,在可观察对象中定义一个绑定(bind)@Published 变量,它允许在登录页面和主页之间切换。但是,当我更新可观察对象内的变量时,主页没有显示。它仍然在登录页面中。我的代码中缺少什么?


struct ContentView: View {

@EnvironmentObject var loginViewModel: LoginViewModel



var body: some View {

return Group {
if loginViewModel.signInSuccess {
MainPageView()
}
else {
LoginView(signInSuccess: $loginViewModel.signInSuccess).environmentObject(LoginViewModel())
}
}


}


}



final class LoginViewModel: ObservableObject {
@Published var signInSuccess:Bool = false;

func performLogin() {
signInSuccess = true;
}

}


struct LoginView: View {

@EnvironmentObject var loginViewModel: LoginViewModel

@Binding var signInSuccess: Bool;

var body: some View {

Button(action: submit) {
Text("Login")
.foregroundColor(Color.white)

}

}

func submit() {
loginViewModel.performLogin()
// signInSuccess = true;
}


}

如果我尝试更新 loginView 中的绑定(bind)“signInSuccess”,它可以成功地将 View 更新到 mainView。但是,有没有一种方法可以更新 Observable 对象内的 signInSuccess,同时将 ContentView 更新为 MainView?

最佳答案

是的,您只需将 View 代码更改为如下所示。绑定(bind)实际上是不必要的。

struct ContentView: View {

@EnvironmentObject var loginViewModel: LoginViewModel

var body: some View {

return Group {
if loginViewModel.signInSuccess {
MainPageView()()
}
else {
LoginView(signInSuccess: $loginViewModel.signInSuccess).environmentObject(self.loginViewModel)
}
}


}


}


window.rootViewController = UIHostingController(rootView: ContentView().environmentObject(LoginViewModel())

关于ios - 为什么更新可观察对象中的变量不更新 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58718486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com