【问题标题】:Iterate through nested snapshot children in Firebase using Swift使用 Swift 遍历 Firebase 中的嵌套快照子项
【发布时间】:2017-08-11 01:31:47
【问题描述】:

我正在尝试遍历 Firebase 数据库中的子项以检索嵌套键。

我的数据库结构如下:

"Users" : {
 "Username" : {
  "Favorites" : {
    "Location" : {
      "Latitude" : 123,
      "LocationName" : "San Francisco",
      "Longitude" : 123
    },
    "Location2" : {
      "Latitude" : 123,
      "LocationName" : "London",
      "Longitude" : 123
    }
  }
 }
}

我正在尝试打印所有“LocationName”键,并且能够打印此键的一个实例,但无法循环并打印此键的所有实例。

我不确定我的 for 循环哪里出错了?

我正在使用的代码如下。

    FIRApp.configure()

    let databaseRef = FIRDatabase.database().reference().child("Users").child("Username").child("Favorites")


    let databaseHandle = databaseRef.observe(.value, with: { (snapshot) in
        for item in snapshot.children {

            if let dbLocation = snapshot.childSnapshot(forPath: "LocationName") as? String {

                    print (dbLocation)
            }

            print(item)

        }

    })

我对 Swift 很陌生,甚至对 Firebase 也很陌生,因此我们将不胜感激!

【问题讨论】:

  • 我认为您的 Firebase 数据库结构有误。在 firebase 中,数据库是键值的。请参阅此处的示例:stackoverflow.com/a/16423316/743923
  • 您在问题中包含了 JSON 树的图片。请将其替换为作为文本的实际 JSON,您可以通过单击 your Firebase Database console 中的导出 JSON 链接轻松获得该文本。将 JSON 作为文本使其可搜索,让我们可以轻松地使用它来测试您的实际数据并在我们的答案中使用它,一般来说这只是一件好事。
  • @FrankvanPuffelen,谢谢你教我怎么做!我已按照您的建议添加了 JSON 文本。
  • @DanutPralea,谢谢你的洞察力——这让我以不同的方式思考这个问题。我将查看您给我的链接,并在 Firebase 文档中重新阅读有关结构的内容。
  • 太棒了!很高兴我提供了帮助 :) 我知道它与标准数据库结构不同,但是一旦你习惯了它,就很容易继续前进

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

您的代码中的问题是 snapshot 指的是 Favorites 节点——而不是在那里寻找 LocationName,您应该在每个 位置子节点。因此,您的循环应如下所示:

let databaseHandle = databaseRef.observe(.value, with: { snapshot in
    for child in snapshot.children {
        let childSnapshot = snapshot.childSnapshotForPath(child.key)
        if let dbLocation = childSnapshot.value["LocationName"] as? String {
            print(dbLocation)
        }
    }
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 2017-12-24
    • 1970-01-01
    • 2020-02-25
    • 2018-01-13
    • 2016-05-27
    • 1970-01-01
    相关资源
    最近更新 更多