gpt4 book ai didi

ios - Firebase 不会跳入方法内部

转载 作者:行者123 更新时间:2023-11-28 11:27:46 26 4
gpt4 key购买 nike

出于某种原因,我的 firebase 方法做了一些对我来说毫无意义的事情。我想用一个用户登录,然后检查一些数据来做出决定。 signIn()getDocument() 这两种方法都不会超出大括号。如果我设置一个断点或跨过它停止的下一个点在大括号之外。我做错了什么?

这是完整的代码:

import Foundation
import Firebase

//@objc(LoginViewController)
class LoginViewController: UIViewController {

@IBOutlet weak var errorMessage: UILabel!

override func viewDidLoad() {
super.viewDidLoad()
}

@IBOutlet weak var emailField: UITextField!
@IBOutlet weak var passwordField: UITextField!

@IBAction func didTapEmailLogin(_ sender: UIButton) {

// Check if empty
guard emailField.text != nil, passwordField.text != nil else {
self.errorMessage.text = "Fields can't be empty."
return
}

// Log in
let email = emailField.text!
let password = passwordField.text!
guard login(with: email, with: password) else {
print("Login didn't work")
return
}

// Check if user has a group yet
guard userHasGroup() else {
print("Getting data didn't work")
return
}
}

func userHasGroup() -> Bool {
var succesful = true
let db = Firestore.firestore()
let userUid = Auth.auth().currentUser?.uid
let docRef = db.collection("users").document(userUid!)
docRef.getDocument { (document, _) in
if let document = document, document.exists {
// Test
print(document.data() as! [String: Any])
} else {
succesful = false
}
}
return succesful
}

func login(with email: String, with password: String) -> Bool {
var succesful = true
Auth.auth().signIn(withEmail: email, password: password) { (user, error) in
guard error == nil, user != nil else {
// There was an error.
self.errorMessage.text = "Email/password incorrect."
succesful = false
return
}
}
return succesful
}
}

最佳答案

这是异步行为的定义。第一次通过你的函数时,闭包外的所有代码都会被执行。然后,当对 signIn 的异步调用返回时,将执行闭包内的代码。

问题出在函数的结构上。您无法从包含闭包的函数中可靠地返回值,因为函数返回时不会设置该值。

您需要更改函数以使用完成处理程序。

我最近在 Why aren't my Firebase Storage URLs uploading to Google Cloud Firestore? 上发布了一个如何执行此操作的示例

关于ios - Firebase 不会跳入方法内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57667235/

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