Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用Swift和Firebase检查是否存在用户名为的用户_Ios_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

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”,它将告诉您已经有一个具有此名称的子节点