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