我对SWIFT非常陌生,我遇到了一个问题,即当状态变量更改时,UI不会更改.
我的内容视图.swft:
struct ContentView: View {
@State private var loginModelInstance = LoginViewModel()
var body: some View {
if (!loginModelInstance.loginSuccessful)
{
LoginViewController(loginViewModel: $loginModelInstance)
}
else
{
FileUploaderView()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
我的登录视图控制器
struct LoginViewController: View {
@Binding var loginViewModel : LoginViewModel
var body: some View {
SignInWithAppleButton(.signIn,
onRequest: loginViewModel.configure,
onCompletion: loginViewModel.handle
)
.frame(height: 50)
.padding()
}
}
struct LoginViewController_Previews: PreviewProvider {
@State static var loginModelInstancePreview = LoginViewModel()
static var previews: some View {
LoginViewController(loginViewModel: $loginModelInstancePreview)
}
}
我的文件上传程序:
import SwiftUI
struct FileUploaderView: View {
var body: some View {
Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
}
}
struct FileUploaderView_Previews: PreviewProvider {
static var previews: some View {
FileUploaderView()
}
}
我的登录视图模型
class LoginViewModel: ObservableObject
{
func configure(request: ASAuthorizationAppleIDRequest)
{
request.requestedScopes = [.fullName, .email]
// request.nonce = ""
}
func handle(authResult: Result<ASAuthorization, Error>) -> Void
{
switch authResult
{
case .success(let authorization):
self.loginSuccessful = true
self.objectWillChange.send()
print("Login for \(authorization) has been \(self.loginSuccessful)")
case .failure(let error):
self.loginSuccessful = false
print(error)
}
}
@Published var loginSuccessful: Bool = false
}
然而,我没能让观点改变.