【发布时间】:2019-11-05 19:51:03
【问题描述】:
我是 SwiftUI 的新手。学习@State、@Binding、@EnvironmentObject 等新属性。
我目前正在开发登录模板,在可观察对象中定义一个绑定@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 中更新绑定“signInSuccess”,它可以成功地将视图更新到 mainView。但是,有没有一种方法可以更新 Observable 对象中的 signInSuccess,同时将 ContentView 更新为 MainView?
【问题讨论】:
标签: ios swift authentication data-binding swiftui