Swift Firebase身份验证在其他类

时间:2018-04-11 00:43:00

标签: ios swift firebase

我正在尝试一个项目只是为了好玩,我想使用Firebase。我为用户做了一个类用户相关的事情。我正在测试注册功能,当它在一个类中时,它首先产生假,然后产生真。但是,当我不将它放在一个单独的类中并将其直接放在视图控制器中时,它会产生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!)
             }
        }

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

感谢您提供所有反馈

1 个答案:

答案 0 :(得分:1)

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

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

应该是

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

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

您需要在swift中阅读编程和闭包中的异步调用,以便更好地理解。您可以从this article开始。