分享
三行代码  ›  专栏  ›  技术社区  ›  Nicole Nigro

将除当前用户的用户名外的所有用户名添加到数组中

  •  0
  • Nicole Nigro  · 技术社区  · 1 周前

    我正在开发followfriends视图控制器,它加载数据库中的所有用户名,但我不希望它加载当前用户的用户名。我需要从当前用户的uid访问用户名,并将不等于它的所有用户名添加到我的数组中。

    database structure

    @objc func loadData() {
        
        let rootRef = Database.database().reference()
        let query = rootRef.child("users").queryOrdered(byChild: "username")
        
        query.observeSingleEvent(of: .value) {
            (snapshot) in
            for child in snapshot.children.allObjects as! [DataSnapshot] {
                let value = child.value as? NSDictionary
                let username = value?["username"] as? String ?? ""
                if username != rootRef.child(Auth.auth().currentUser!.uid).value(forKey: "username") as! String{
                    self.usernames.append(username)
                }
                print(username)
            }
            self.tableView.reloadData()
            print(self.usernames)
        }
    }
    
    1 回复  |  直到 1 周前
        1
  •  1
  •   Harry J    1 周前

    您应该尽量减少循环中的查询,尤其是无关的查询。如果您的数据库架构使用users unique id作为键,那么您可以使用 child.key .

    @objc func loadData() {
            
            let rootRef = Database.database().reference()
            let query = rootRef.child("users").queryOrdered(byChild: "username")
            
            query.observeSingleEvent(of: .value) { (snapshot) in
                for child in snapshot.children.allObjects as! [DataSnapshot] {
                    let value = child.value as? NSDictionary
                    let username = value?["username"] as? String ?? ""
                    if Auth.auth().currentUser!.uid != child.key {
                        self.usernames.append(username)
                    }
                    print(username)
                }
                self.tableView.reloadData()
                print(self.usernames)
            }
        }