使用 Swift 遍历 Firebase 中的嵌套快照子项
Posted
技术标签:
【中文标题】使用 Swift 遍历 Firebase 中的嵌套快照子项【英文标题】:Iterate through nested snapshot children in Firebase using Swift 【发布时间】: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 中,数据库是键值的。请参阅此处的示例:***.com/a/16423316/743923 您在问题中包含了 JSON 树的图片。请将其替换为作为文本的实际 JSON,您可以通过单击 your Firebase Database console 中的导出 JSON 链接轻松获得该文本。将 JSON 作为文本使其可搜索,让我们可以轻松地使用它来测试您的实际数据并在我们的答案中使用它,一般来说这只是一件好事。 @FrankvanPuffelen,谢谢你教我怎么做!我已按照您的建议添加了 JSON 文本。 @DanutPralea,谢谢你的洞察力——这让我以不同的方式思考这个问题。我将查看您给我的链接,并在 Firebase 文档中重新阅读有关结构的内容。 太棒了!很高兴我提供了帮助 :) 我知道它与标准数据库结构不同,但是一旦你习惯了它,就很容易继续前进 【参考方案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)
)
【讨论】:
以上是关于使用 Swift 遍历 Firebase 中的嵌套快照子项的主要内容,如果未能解决你的问题,请参考以下文章
在嵌套的孩子内部迭代。 Firebase 和 Swift 3