2016-09-21 78 views
0

我之前发布了一个关于如何访问儿童快照内部数据的问题,我得到了一个非常有效的答案。但是,这个解决方案只允许我通过价值检索数据 - 而不是我的孩子。你看,我有一个JSON树结构是这样的:Swift Firebase访问儿童快照中的数据(由childAdded提供)

Players { 

PlayerID { 

Username 

Rank 

Achievements { 

Rookie: yes 

} 


} 

然后我意识到,我真的需要多个“childByAutoId”下的“成就” - 这将是这个样子:

Player { 

PlayerID { 

Username 

Rank 

Achievements { 

autoID1 { 

isAchieved: yes 

} 

autoID2 { 

isAchieved: yes 

} 

} 

} 

那么我会如何去试图抓住每个childByAutoId的ChildValues?我知道一个事实,即在观察快照时,这适用于'新增儿童',但这似乎不是这里的一个功能。

下面是代码我现在所拥有的:

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

怎么样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将是你的自动识别和each.1将成为该ID的相应的那本词典dictionary.For更深层次的细节只是通过字典

+0

问题导航我需要在每个'childByAutoId'中提供更多的数据,这些数据也是我需要的。嗯..这不可能吗? – askaale

+0

更新了我的答案,阅读最后一部分.. – Dravidian

+0

我想了一切,非常感谢! :) – askaale