У вас есть несколько вопросов в одном, поэтому я отвечу на них кодом. Следующий код может быть сокращен; Я оставил его немного подробным, чтобы показать поток, и добавил небольшую проверку ошибок, которая может быть улучшена.
Обратите внимание, что я заменил ключи uid_0 и uid_1 для краткости.
//a class to store the firebase data in an array
class ContactClass {
var key = ""
var email = ""
var name = ""
var username = ""
convenience init(fromSnapshot snap: DataSnapshot) {
self.init()
self.key = snap.key
if let dict = snap.value as? [String: Any] {
let e = dict["Email"] as? String ?? ""
let n = dict["Name"] as? String ?? ""
let u = dict["Username"] as? String ?? ""
self.email = e
self.name = n
self.username = u
}
}
}
var contactArray = [ContactClass]() //array to hold data read from Firebase
//read all of the contacts, create a class for each and store in an array
//then print their keys and filter the array for a specific key and print the name
func contactAction() {
let refContacts = self.ref.child("allUsers")
refContacts.observeSingleEvent(of: .value, with: { (snapshot) in
for child in snapshot.children {
let childSnap = child as! DataSnapshot
let contact = ContactClass(fromSnapshot: childSnap)
self.contactArray.append(contact)
}
for c in self.contactArray {
print(c.key) //prints uid_0 and uid_1
}
let filteredContactResult = self.contactArray.filter { $0.key == "uid_1"}
if let firstResult = filteredContactResult.first {
let name = firstResult.name
print(name) //prints asd
}
})
Вероятно, есть 100 других способов сделать те же самые задачи; этот метод будет поддерживать порядок и позволит легко фильтровать прочитанные данные.
О - вы используете более старую версию Firebase (из-за FIRDatabase), поэтому было бы неплохо обновить вашу Firebase до текущей версии.
self.ref, использованный в приведенном выше коде, является классом var, который указывает на мою Firebase.