因此,我需要幫助為 firebase 登錄按鈕創建異步等待。當 Firebase 已對用戶進行身份驗證的訊息通過時,我需要全屏封面我必須消失。基本上,我有一個全屏封面,它正在等待來自云的回應,說用戶已通過身份驗證,現在可以關閉全屏封面。(基本上是注冊視圖上的登錄按鈕)問題是當您單擊登錄時,一旦全屏封面沒有關閉,因為來自云端的資訊通過速度不夠快,這意味著您必須單擊登錄按鈕兩次,使全屏蓋成功關閉。
按鈕:
Button(action: {
guard !email.isEmpty, !password.isEmpty else {
return
}
fireViewModel.signIn(email: email, password: password)
if fireViewModel.signedIn { presentationMode.wrappedValue.dismiss() }
}, label: {
Text("Login")
})
Firebase 登錄代碼:
func signIn(email: String, password: String) {
auth.signIn(withEmail: email, password: password) { result, error in
guard result != nil, error == nil else {
print(error ?? "")
return
}
DispatchQueue.main.async {
// Success
self.signedIn = true
}
}
}
誰能幫我做到這一點?我是 swift 新手,對 async-await 沒有經驗……謝謝!
uj5u.com熱心網友回復:
您可以嘗試使用completion處理程式,例如:
func signIn(email: String, password: String, completion: @escaping (Bool) -> Void) {
auth.signIn(withEmail: email, password: password) { result, error in
guard result != nil, error == nil else {
print(error ?? "")
completion(false) // <-- here
return
}
DispatchQueue.main.async {
// Success
self.signedIn = true
completion(true) // <-- here
}
}
}
和
Button(action: {
guard !email.isEmpty, !password.isEmpty else {
return
}
fireViewModel.signIn(email: email, password: password) { isSignedIn in
if isSignedIn {
presentationMode.wrappedValue.dismiss()
} else {
// do something else
}
}
}, label: {
Text("Login")
})
根據您的需要調整邏輯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/455032.html
