ios - Swift firebase createUser 函数完成块
问题描述
在 swift 中使用 firebase 时,我遇到了一个非常奇怪的问题。似乎脚本在没有等待完成块完成的情况下继续进行。这就是我的意思:
我有一个功能:
func create_user(email:String, password:String) -> Bool{
var create_suc = false
Auth.auth().createUser(withEmail: email, password: password) { (user, error) in
if let error = error{
// Error creating new user.
create_suc = false
print("In fail closure: \(create_suc)")
}else{
// Create successfully.
create_suc = true
print("In success closure: \(create_suc)")
}
}
print("Before return: \(create_suc)")
return create_suc
}
以及调用此函数的上下文:
@IBAction func sign_up(_ sender: UIButton) {
let result = create_user(email: acc_email.text!, password: acc_password.text!)
print("Create successfully: \(result)")
我得到的结果很奇怪:
**Before return: false**
**Create successfully: false**
2018-08-26 16:41:55.313457-0700 chat_app[251:9301] TIC Read Status [2:0x0]: 1:57
2018-08-26 16:41:55.313611-0700 chat_app[251:9301] TIC Read Status [2:0x0]: 1:57
2018-08-26 16:41:56.013564-0700 chat_app[251:9300] TIC Read Status [3:0x0]: 1:57
2018-08-26 16:41:56.013721-0700 chat_app[251:9300] TIC Read Status [3:0x0]: 1:57
**In success closure: true**
解决方案
任务是异步的并不奇怪。
func create_user(email: String, password: String, completion: @escaping(_ res: Bool) -> Void ) {
Auth.auth().createUser(withEmail: email, password: password) { (user, error) in
if let error = error {
// Error creating new user.
completion(false)
print("In fail closure: \(create_suc)")
} else {
// Create successfully.
completion(true)
}
}
}
create_user(email: acc_email.text!, password: acc_password.text!) { (res) in
print(res)
}
推荐阅读
- tensorflow - 使用种子对张量流概率进行采样
- c# - 表单未在 asp.net core mvc 2.2.1 中提交
- c# - Fluent nHibernate:对不同架构中结构相同的表使用相同的映射文件
- javascript - 如何在javascript中拒绝用户输入的无效字符串
- html - 菜单向下滚动页面
- css - 屏幕缩小时如何垂直转换3个水平项目?
- r - 如何将具有父属性的XML属性解析为R中的数据框
- rest - MVC 核心 rest api 中的多个有效负载
- amazon-web-services - 无法连接到 AWS/RDS 数据库实例
- amazon-web-services - 如何增加 AWS lambda 部署包的最大大小 (RequestEntityTooLargeException)?