Ios 使用Swift和Firebase检查是否存在用户名为的用户
我目前正在尝试编写一个函数,该函数在用户存在时传递用户数据。当用户名在数据库中时,代码是可以的,但是如果数据库中没有记录用户名,我不知道如何使用返回函数 我是初学者,我就是这么做的:Ios 使用Swift和Firebase检查是否存在用户名为的用户,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我目前正在尝试编写一个函数,该函数在用户存在时传递用户数据。当用户名在数据库中时,代码是可以的,但是如果数据库中没有记录用户名,我不知道如何使用返回函数 我是初学者,我就是这么做的: func observeUserByUsername(username: String, completion: @escaping (Userm?) -> Void) { REF_USERS.queryOrdered(byChild: "username_lowercase").queryEqu
func observeUserByUsername(username: String, completion: @escaping (Userm?) -> Void) {
REF_USERS.queryOrdered(byChild: "username_lowercase").queryEqual(toValue: username).observeSingleEvent(of: .childAdded) { (snapshot) in
if let dict = snapshot.value as? [String: Any] {
let user = Userm.transformUser(dict: dict, key: snapshot.key)
completion(user)
} else {
print("no user")
completion(nil)
}
}
}
我想有这样的东西:如果有这个用户名的用户->返回nil(用于完成)
你知道我怎么做吗?所以如果我做对了,你只需要检查是否有用户名的用户存在。您只需输入firebase的路径并使用exists()方法检查此子节点是否存在。我有一个类似的方法,你可以改变它以适应你的项目
func checkUsernameAvailability(completion: @escaping (_ available:Bool)->()){
guard let lowercasedText = usernameTextField.text?.lowercased() else {completion(false); return}
let ref = Database.database().reference().child("users").child("username").child(lowercasedText)
ref.observeSingleEvent(of: .value) { (snapshot) in
if snapshot.exists(){
completion(false)
return
}else{
completion(true)
}
}
}
小心,Firebase不区分大小写(这就是为什么我总是检查并存储小写版本)。如果您的子节点(例如)是“UserName”,并且您搜索名称“UserName”,它将告诉您已经有一个具有此名称的子节点