Swift中Firebase的执行路径问题

时间:2016-09-07 19:15:48

标签: ios swift firebase firebase-realtime-database firebase-authentication

我有一个设置在一个文件中(LoginDelegate)我有一个函数来检查用户是否存在:

class LogInDelegate {
    func userCheck(email: String, completion: (Bool) -> Void) {
        authUserCheck() {
            let usersRef = FIRDatabase.database().reference().child("users")

            usersRef.queryOrderedByChild("email").queryEqualToValue("\(email)").observeEventType(.Value, withBlock: { snapshot in
                if (snapshot.value is NSNull) { completion(false) }
                else { completion(true) }
            })
        }
    }
}

在我的视图控制器上,我有一些其他功能可以检查几个textField的更改,如果用户输入了有效的电子邮件和足够长的密码,则执行此功能:

self.forwardButton.enabled = true
delegate.userCheck(email) { userExists in
    if userExists {
        self.forwardButton.setTitle(buttonTitle.login.rawValue, forState: .Normal)
    } else {
        self.forwardButton.setTitle(buttonTitle.new.rawValue, forState: .Normal)
    }
}

第一次调用userCheck函数时,不执行.observeEventType闭包。您必须对文本字段进行另一次更改,以便第二次调用userCheck,然后执行闭包。

为什么它第一次不执行?是因为嵌套的闭包吗?如果是这样,我该怎么办?

1 个答案:

答案 0 :(得分:1)

发现我的问题。在authUserCheck中,在登录并执行关闭后,它立即退出,因此它没有给网络请求时间做任何事情。