Swift 有人能告诉我为什么我总是出错吗;void函数中意外的非void返回值“;
我在尝试返回真或假布尔值时出错。。。有人能帮忙吗?我试图检查Firebase数据库中是否存在用户Swift 有人能告诉我为什么我总是出错吗;void函数中意外的非void返回值“;,swift,firebase,swift3,firebase-realtime-database,Swift,Firebase,Swift3,Firebase Realtime Database,我在尝试返回真或假布尔值时出错。。。有人能帮忙吗?我试图检查Firebase数据库中是否存在用户 func checkIfUserExists(email: String) -> Bool{ FIRDatabase.database().reference().child("users").observe(.childAdded, with: { (snapshot) in if let dictionary = snapshot.value as? [
func checkIfUserExists(email: String) -> Bool{
FIRDatabase.database().reference().child("users").observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject]{
switch email {
case dictionary["email"] as! String!:
return true
break
default:
return false
break
}
}
}, withCancel: nil)
}
您的返回在闭包中,而不是函数中。我想到的是,您可以像这样在函数中返回一个闭包
func checkIfUserExists(email: String, completion:(success:Bool) -> ())
一旦FIRDatabase闭包结束,而不是返回true或false,您就可以
completion(success:true) // or false
像这样使用它
checkIfUserExists("email@mail.com") { (success) in
if success
{
// Email found
}
else{
}
}
这可能会有帮助以这种方式更改它
func checkIfUserExists(email: String, results:(exists:Bool)->Void){
FIRDatabase.database().reference().child("users").observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject]{
switch email {
case dictionary["email"] as! String!:
results(true)
break
default:
results(false)
break
}
}
}, withCancel: nil)
}
函数可以这样调用
checkIfUserExists(email: "some email", results:{ exists
if exists {
//do something
}
else{
// user do not exist... do something
}
})
@ohr的答案应该是被认可的,这只是一个澄清嗯。。。但我只需要函数“email”中的一个参数,我想根据switch返回true或false,我还要提到的是,在case中不需要中断调用,因为switch case没有隐式的错误。@Moonwalker4z,用电子邮件调用函数,然后在完成块上按enter键自动生成代码。@ohr ok,那么在代码和完成中我应该写些什么?@ohr ok,但是如何获得success属性?success?return true:return false这一行在三值ECpression中的“?”之后给出了一个错误的预期表达式这是完全错误的,它将始终返回
false
。简单规则:您不能在函数的返回参数中从异步任务返回某些内容对不起,这是一个巨大的错误:D现在它是用一个工作示例重新格式化的。当我尝试使用它checkIfUserExists时,它会说预期的声明?我已编辑我的答案以删除意外添加的额外“)”