Since the firebase operation gives you a callback closure, and the calls made asynchronously, I believe it wont be possible for you to directly return from closures. However, you can return an escaping closure indicating true or false as follows...
func checkUserWith(email: String, completion: @escaping (Bool) -> Void)
{
let usersDB = database.collection("users")
usersDB.whereField("email", isEqualTo: email).getDocuments { (snapshot, error) in
if error != nil
{
print("Error: \(error?.localizedDescription ?? "")")
completion(false)
}
for document in (snapshot?.documents)! {
if document.data()["email"]! as! String == email {
completion(true)
return
}
}
completion(false)
}
}
Then when you call this method:
checkUserWith(email: emailHere) { (isSucceeded) in
if isSucceeded {
//it exists, do something
} else {
//user does not exist, do something else
}
}