有人能告诉我为什么我一直收到错误“void函数中出现意外的非void返回值”

时间:2016-09-20 16:17:51

标签: swift firebase swift3 firebase-realtime-database

尝试返回真假Bool值时出错...有人可以帮忙吗?我试图检查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)
}

2 个答案:

答案 0 :(得分:2)

你的回归是封闭,而不是你的功能。我想到的是你可以像这样在你的函数中返回一个闭包

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{

    }
}

link可能会有所帮助

答案 1 :(得分:0)

以这种方式改变

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答案应该是受约束的,这只是一个澄清