在另一个类中,Swift Firebase身份validation无法正常工作

我正在尝试一个项目只是为了好玩,我想使用Firebase。 我为用户提供了与用户相关的课程。 我正在测试注册function,当它在一个类中时,它首先产生假,然后产生真。 但是当我不将它放在一个单独的类中并将其直接放在视图控制器中时,它会产生true并执行指示的segue。 由于我不知道如何解释这个最好,我将在下面显示哪些代码有效,哪些代码无效。

Firebase嵌入在一个类中:

import Foundation import Firebase class Account { var email: String var password: String init(email: String, password: String) { self.email = email self.password = password } func createAccount ()-> Bool{ var made = false Auth.auth().createUser(withEmail: email, password: password) { (user, error) in if (error == nil) { print("Registration Successful") made = true }else{ print(error!) made = false } } print("this is\(made)") return made } 

按钮代码:

 @IBAction func signUpButton(_ sender: UIButton) { signUpEmail = emailTextField.text! signUpPassword = passwordTextField.text! let signUp = Account(email: signUpEmail, password: signUpPassword); let signUpOccur = signUp.createAccount() if( signUpOccur == true){ performSegue(withIdentifier: "signUpToHome", sender: self) }else{ print(signUpOccur) }} 

////这会产生:“这是假的”然后“注册成功”然后“这是真的”但是由于第一次产生错误而没有执行Segue我假设

代码按预期工作:

  signUpEmail = emailTextField.text! signUpPassword = passwordTextField.text! Auth.auth().createUser(withEmail: signUpEmail, password: signUpPassword) { (user, error) in if (error == nil) { print("Registration Successful") self.performSegue(withIdentifier: "signUpTohome", sender: self) }else{ print(error!) } } 

是否可以将东西放在一个类和函数中,或者最好将它按照它的工作方式放在按钮中? 或者我做错了什么?

感谢您的所有反馈

您的问题是createUser方法是异步的。 在createUser完成之前,您将从函数返回。

func createAccount()-> Bool {...}

应该

func createAccount(completion: (Bool)->Void) {...}

然后,当Firebase Auth调用createUser完成时,您调用completion(made) make completion(made)

您将需要在swift编程和闭包中阅读异步调用以更好地理解。 你可以从这篇文章开始 。