Вот код для чтения структуры Firebase, предложенной в вопросе
let planitsRef = self.ref.child("planits")
planitsRef.observeSingleEvent(of: .value, with: { snapshot in
for child in snapshot.children {
let planSnap = child as! DataSnapshot
let planDict = planSnap.value as! [String: Any]
let title = planDict["plan_title"] as! String
let senderId = planDict["sender_id"] as! String
print("plan title: \(title) senderId: \(senderId)")
let peopleOnPlanitSnap = planSnap.childSnapshot(forPath: "people_on_planit")
for peopleChild in peopleOnPlanitSnap.children {
let peopleChildSnap = peopleChild as! DataSnapshot
let userSnapDict = peopleChildSnap.value as! [String: Any]
let userId = userSnapDict["user_id"] as! String
print(" userId: \(userId)")
}
}
})
и вывод
plan title: Some title senderId: 39FdLfdIO8832
userId: uid_0
userId: uid_1
- пара замечаний -
Поскольку связанные пользователи, кажется, хранятся по их идентификатору пользователя, и это единственные данные, хранящиеся в этом узле, вы можете изменить этот узел
people_on_planit
-LEmh6IxqguVBJEwghZv (auto ID)
userID: "kkdiEW0D9"
, чтобы он выглядел следующим образом
people_on_planit
uid_x: true //uid_x would be kkdiEW0D9 etc
uid_y: true
он немного полнее и чище и требует меньше кода для его чтения.Кроме того, вы можете запросить его более легко, если он когда-либо появится.
также обратите внимание, что я немного изменил соглашение об именах;вы можете форматировать ключи как хотите, но я выбрал такие ключи, как plan_title вместо PlanIt Title и sender_id и user_id вместоsenderId и userId.Моя практика заключается в том, что для настоящих ключей Firebase я использую все строчные буквы, подчеркивание вместо пробелов, а в коде я использую строчные / прописные буквы без пробелов.Поэтому, если вы скопируете и вставите мой код, вам нужно будет их изменить.