子快照内的Swift Firebase访问数据(通过childAdded)

时间:2016-09-21 20:42:23

标签: swift firebase firebase-realtime-database

我之前发布了一个关于如何访问子快照中的数据的问题,我得到了一个非常好的答案。但是,这个解决方案只允许我按值检索数据 - 而不是我的孩子。你看,我有一个像这样的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)

             }        
       }
    }

非常感谢帮助!

1 个答案:

答案 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的相应字典。有关该字典的更深入细节,只需浏览字典