2016-06-27 1 views
2

В настоящее время я борюсь с доступом к другим данным, хранящимся в пути, более конкретными данными из подпапки. Моя установка выглядит следующим образом:Firebase/Swift: childSnapshotForPath access autID data?

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

Так что я в настоящее время работает этот код, чтобы захватить как имя пользователя, пол и возраст:

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)     
}) 

Однако я хочу, чтобы захватить все названия команд, хранящихся в footballTeams путь, заказанный как «Team1, Team2, Team3» и т. д. Поэтому я наткнулся на «snapshot1.childSnapshotForPath("footballTeams/Team1").value!["name"]». Однако это сработало бы, если бы я знал точное имя каждого имени команды, но это сохраняется как автоматический идентификатор. Любые идеи о том, как я к этому подхожу?

Заранее спасибо.

ответ

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

Это также похоже на другое решение, которое я пытался, но и с моим кодом и ваш код, я получил эту ошибку: «Initializer для условной привязки должны иметь факультативный тип, а не" FIRDataSnapshot». – askaale

+0

srry. все еще изучая некоторые быстрые здесь и там. Дайте мне знать, работает ли мое редактирование. если он не просто избавится от этой проверки и перейдет с 'для дочернего элемента в snapshot1.childSnapshotForPath (" footballTeams "). children.allObjects as [FDataSnapshot] { print (child.value) }' – adolfosrs

+0

Спасибо! Оно работает! – askaale