Swift 有人能告诉我为什么我总是出错吗;void函数中意外的非void返回值“;

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? [

我在尝试返回真或假布尔值时出错。。。有人能帮忙吗?我试图检查Firebase数据库中是否存在用户

    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时,它会说预期的声明?我已编辑我的答案以删除意外添加的额外“)”