2016-09-21 58 views
0

我目前正试图从Swift中的子快照访问数据。这里是我的代码,我有(其中斯威夫特3 /火力地堡更新之前曾):Swift Firebase访问子快照数据

if let achievements = snapshot1.childSnapshotForPath("Achievements").children.allObjects as? [FIRDataSnapshot] { 


        if achievements.count != 0 { 

         if let val = achievements[0].value!["somevalue"] as? Int { 
          self.dict["somevalue"] = val 
         } 


        } 

因此,我想在这里做的,是创建一个子快照(成就)的变量,并获得子级快照数据。成就[0]将简单地返回第一个值。但是,这似乎并不奏效。我应该如何处理这个问题?

我目前做这个快照里面已经(的 'observeType:.ChildAdded')

我的火力地堡DB是这样的:

Achievements{ 

randomId1 { 
somevalue : somevalue 
} 

randomId2 { 
somevalue2 : somevalue2 
} 
} 

更新代码:

func loadData() { 

     ref.child("Players").observe(FIRDataEventType.childAdded) { (snapshot:FIRDataSnapshot) in 

      if let value = snapshot.value as? [String:AnyObject], let username = value["Username"] as? String { 

      } 

      if let value = snapshot.value as? [String:AnyObject], let ranking = value["Rank"] as? String { 

      } 

      if let childSnapshot = snapshot.childSnapshot(forPath: "Achievements").children.allObjects as? [FIRDataSnapshot] { 

       if childSnapshot.count != 0 { 

        if let achievement1 = childSnapshot[0].value!["Rookie"] as? String { 
         print(achievement1) 
        } 

       } 
      } 

     } 

    } 

JSON树:

Players { 

PlayerID { 

Username 

Rank 

Achievements { 

Rookie: yes 

} 


} 
+0

给你的全部功能。而你的实际JSON树,很难从你给出的东西中破译。 – Dravidian

+0

我现在已经为您提供了完整的代码和JSON树。我似乎无法找到一种方法来抓取childsnapshot数据,上面的代码返回错误。我也试图将其定义为[String:AnyObject] - 但这只会导致一个零。 – askaale

+0

而且很清楚,我只是想从'新秀'价值中返回'是'。 – askaale

回答

2

请尝试: -

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

这也是我尝试过的东西,它给我留下如下的错误信息:输入'Any'没有下标成员。 – askaale

+0

尝试将'[FIRDataSnapshot]'替换为'[String:AnyObject]' – Dravidian

+0

错误:'模糊引用成员'下标'。 – askaale