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

Posted

技术标签:

【中文标题】将除当前用户的用户名之外的所有用户名添加到数组【英文标题】:Add all usernames except current user's username to array 【发布时间】:2020-06-30 00:00:19 【问题描述】:

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

@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】:

您应该尽量减少循环内的查询,尤其是不相关的查询。鉴于您的数据库架构使用用户唯一 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)
        
    

【讨论】:

哈利的答案很好。对于 Nicole:此代码读取所有 /users。如果您发现自己经常只需要用户名,那么仅使用这些用户名来存储节点会更有效:/usernames。这样一来,您下载的未读数据就会少很多,从而降低您的带宽成本,并为您的用户带来更好的性能(可能还会收取数据费用)。

以上是关于将除当前用户的用户名之外的所有用户名添加到数组的主要内容,如果未能解决你的问题,请参考以下文章

查询生成器 - 显示除用户回答之外的所有内容

我想使用 Next-Auth 实现会话管理系统

htaccess 将除一页之外的所有页面从 html 重定向到 php

将除一个元素之外的所有元素设置为暗色背景

登录后的Angular JWT和用户信息存储

在 SceneKit 中,是不是可以将除对象当前位置之外的导入动画作为原点?