2016-06-27 1 views
2

私は現在、パスに格納されている他のデータにアクセスすることに苦心しています。具体的には、サブフォルダからデータを取り出します。しかし、私はfootballTeamsに格納されているすべてのチーム名をつかむしたいFirebase/Swift:childSnapshotForPathはautoIDデータにアクセスしますか?

ref.child("Users").observeEventType(.ChildAdded, withBlock: { (snapshot1:FIRDataSnapshot) in     
     //code goes here.. 
     var username = String(snapshot1.value!["username"] as! String) 
     var gender = String(snapshot1.value!["gender"] as! String) 
     var age = Int(snapshot1.value!["age"] as! Int)     
}) 

userID{ 
    username:Andreas, 
    gender:Male, 
    age:18, 
    footballTeams{ 
     Team1{ 
      name:My team 1 
      matchesPlayed:3 
     } 
    } 
} 

だから私は、現在のユーザー名、性別や年齢の両方をつかむために、このコードを実行している:私のセットアップは、このようになります。 'Team1、Team2、Team3'のように指示されたので、私は "snapshot1.childSnapshotForPath("footballTeams/Team1").value!["name"]"を見つけました。しかし、私は各チームの名前 - パスの正確な名前を知っていた限り、これはうまくいきましたが、これは自動IDとして格納されています。どのように私はこれにアプローチするかについての任意のアイデア?

ありがとうございます。

答えて

2

childSnapshotForPathで働くことを選択したとき、正しい方法で行っていました。 /footballTeamsブランチスナップショットを取得し、各子を取得するために反復処理するだけです。また、私が試した別のソリューションに似てい

ref.child("Users").observeEventType(.ChildAdded, withBlock: { (snapshot1:FIRDataSnapshot) in     
     var username = String(snapshot1.value!["username"] as! String) 
     var gender = String(snapshot1.value!["gender"] as! String) 
     var age = Int(snapshot1.value!["age"] as! Int) 
     if let footballTeamsSnapshot = snapshot1.childSnapshotForPath("footballTeams") as? FIRDataSnapshot { 
     for child in footballTeamsSnapshot.children.allObjects as [FDataSnapshot] { 
      print(child.value) 
     } 
     }   
}) 
+0

は、しかし、両方の私のコードとあなたのコードで、私はこのエラーを得た:「条件付きの結合のための初期化子はオプションの種類ではなく、 『FIRDataSnapshot』を持っている必要があります」。 – askaale

+0

srry。まだここでいくつかの迅速な学習。私の編集がうまくいけば教えてください。その確認を取り除き、snapshot1.childSnapshotForPath( "footballTeams")内の子のために行ってください。children.allObjectsを[FDataSnapshot] { print(child.value) } ' – adolfosrs

+0

ありがとう!できます! – askaale

関連する問題