使用Swift在Firebase中迭代嵌套的快照子项

时间:2017-03-19 21:08:41

标签: ios swift firebase firebase-realtime-database

我试图在我的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,所以任何帮助都会非常感谢!!

1 个答案:

答案 0 :(得分:3)

您的代码中的问题是snapshot引用了收藏夹节点 - 而不是在那里查找 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)
        }
    }
})