将除当前用户的用户名之外的所有用户名添加到数组
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
。这样一来,您下载的未读数据就会少很多,从而降低您的带宽成本,并为您的用户带来更好的性能(可能还会收取数据费用)。以上是关于将除当前用户的用户名之外的所有用户名添加到数组的主要内容,如果未能解决你的问题,请参考以下文章