2016-09-21 11 views
0

現在、Swiftの子スナップショットからデータにアクセスしようとしています。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 
         } 


        } 

だから私はここでやろうとしています、子スナップショット(実績)の変数を作成することで、アクセス:ここで(スウィフト3/Firebase更新前に働いていた)私は私のコードです子スナップショットデータを取得します。達成[0]は最初の値を返すだけです。しかし、これは動作していないようです。私はこれにどのようにアプローチすべきですか?

私は現在、すでに( 'observeType:.ChildAdded' は)スナップショット内でこれをやっている

マイFirebase 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]として定義しようとしましたが、これはnilになります。 – 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

エラー: 'メンバー' subscript 'へのあいまいな参照。 – askaale

関連する問題