我之前发布了一个关于如何访问子快照中的数据的问题,我得到了一个非常好的答案。但是,这个解决方案只允许我按值检索数据 - 而不是我的孩子。你看,我有一个像这样的JSON树结构:
Players {
PlayerID {
Username
Rank
Achievements {
Rookie: yes
}
}
然后我意识到我真的需要'成就'下的多个'childByAutoId' - 看起来像这样:
Player {
PlayerID {
Username
Rank
Achievements {
autoID1 {
isAchieved: yes
}
autoID2 {
isAchieved: yes
}
}
}
那么我将如何继续尝试获取每个childByAutoId的ChildValues?我知道一个事实是,这与观察快照中的'ChildAdded'有关 - 但是 - 这似乎不是这里的特征。
以下是我现在的代码:
if let childSnapshot = snapshot.childSnapshot(forPath: "Achievements") as? FIRDataSnapshot{
if let achievementDictionary = childSnapshot.value as? [String:AnyObject] , achievementDictionary.count > 0{
if let achieveMedal = achievementDictionary["Rookie"] as? String {
print(achieveMedal)
}
}
}
非常感谢帮助!
答案 0 :(得分:1)
这样的JSON树结构怎么样: -
Achievements : {
achievement1 : true,
achievement2 : true,
achievement3 : false,
achievement4 : true,
}
检索您的成就: -
if let childSnapshot = snapshot.childSnapshot(forPath: "Achievements") as? FIRDataSnapshot{
if let achievementDictionary = childSnapshot.value as? [String:AnyObject] , achievementDictionary.count > 0{
for each in achievementDictionary{
print(each.0) // achievement name
print(each.1) // isAchieved (true/false)
}
}
}
}
出于导航原因,不建议在数据库中添加此类深层节点。
但此代码也适用于childByAutoID
案例,即 each.0
将成为您的自动ID, each.1
将成为id的相应字典。有关该字典的更深入细节,只需浏览字典