我有一个设置在一个文件中(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,然后执行闭包。
为什么它第一次不执行?是因为嵌套的闭包吗?如果是这样,我该怎么办?
答案 0 :(得分:1)
发现我的问题。在authUserCheck中,在登录并执行关闭后,它立即退出,因此它没有给网络请求时间做任何事情。