swift - 使用 swift 代码从 firebase 数据库获取所有 uid

标签 swift firebase-realtime-database

我有这个数据库(请参阅上面的图像链接)和带有路径的代码,该代码使用以下方式到达目的地:

databaseReference.child("users").child(currentUser!.uid).child("todo-list")

Firebase database structure

在第一个节点“users”下,下一层是userID的keyvalue,后面还有更多的子层“todo-list”等。

我想从所有可用的 uid 中获取数据。我该如何进行查询?

这是代码:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    databaseReference = Database.database().reference()
    currentUser = Auth.auth().currentUser
    let todoListRef = databaseReference.child("users").child(currentUser!.uid).child("todo-list")
    todoListRef.observe(DataEventType.value, with: { (DataSnapshot) in
        self.itemsToLoad.removeAll()
        let enumerator = DataSnapshot.children

        while let todoItem = enumerator.nextObject() as? DataSnapshot
        {
            let item = todoItem.value as AnyObject

            self.itemsToLoad.append(item)
        }
        self.itemsToLoad = self.itemsToLoad.reversed()
        self.tableView.reloadData()
    })
}

最佳答案

它与您已有的代码非常相似。您不是观察 /users/$uid,而是观察整个 /users 节点。然后在闭包中添加一个额外的循环,以迭代所有用户。

所以:

let usersRef = databaseReference.child("users")
usersRef.observe(DataEventType.value, with: { (usersSnapshot) in
  let userEnumerator = usersSnapshot.children
  while let user = userEnumerator.nextObject() as? DataSnapshot {
    let uid = user.key
    let todoEnumerator = user.childSnapshot(forPath: "todo-list").children

    while let todoItem = todoEnumerator.nextObject() as? DataSnapshot {
        let item = todoItem.value as AnyObject

        self.itemsToLoad.append(item)
    }
  }
})

添加的 while 循环遍历用户,而内部的 while 循环遍历每个用户的待办事项。我删除了与表格 View 相关的代码,因为您想要执行的操作并不依赖于 Firebase。

关于swift - 使用 swift 代码从 firebase 数据库获取所有 uid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52798732/

相关文章:

ios - Xcode 6.3 与 Swift 1.0 可能吗?

ios - 如何在启用 sizeToFit 的情况下截断 UILabel?

string - Swift:如何将 String 转换为 UInt?

javascript - Polymer 从 firebase 实时数据库更新 javascript 数组

javascript - 火力地堡 : Wait For Async and Push to an array

swift - 根据键和值对字典数组进行排序

ios - TableView 上的事件指示器

node.js - Firebase问题,无法设置数据

javascript - Firebase 在 javascript 中全局访问子项

javascript - Firebase:从云函数调用云函数