我正在尝试一个项目只是为了好玩,我想使用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!)
}
}
是否可以将东西放在一个类和函数中,或者最好将它按照它的工作方式放在按钮中?或者我做错了什么?
感谢您提供所有反馈
答案 0 :(得分:1)
您的问题是createUser
方法是异步的。在made
完成之前,您将从函数返回createUser
。
func createAccount()-> Bool {...}
应该是
func createAccount(completion: (Bool)->Void) {...}
然后,当Firebase Auth调用createUser完成时,您调用completion(made)
。
您需要在swift中阅读编程和闭包中的异步调用,以便更好地理解。您可以从this article开始。