Swift Firebase получит ценности у детей - PullRequest
0 голосов
/ 03 июня 2019

У меня проблемы с получением всех сообщений с использованием firebase для swift.

Я хочу просмотреть и получить все значения imageURL для всех пользователей, которые сделали сообщение.

Post-> userID-> PostKey-> imageURl

Это код, который я пытался использовать для получения этих значений, но безрезультатно.

var ref: DatabaseReference!

    ref = Database.database().reference()

    let postsRef = ref.child("posts")
    postsRef.observeSingleEvent(of: .value) { (snapshot) in
        if snapshot.exists() {
            for child in snapshot.children { //.value can return more than 1 match
                let snap = child as! DataSnapshot
                let dict = snap.value as! [String: Any]
                let myPostURL = dict["imageURL"] as! String
                print("POST URL: " + myPostURL)

            }

        } else {
            print("no user posts found")
        }
    }

enter image description here

1 Ответ

2 голосов
/ 03 июня 2019

Ваша переменная ref указывает на узел posts:

let postsRef = ref.child("posts")

Затем вы получаете значение этого узла и перебираете его дочерние элементы:

postsRef.observeSingleEvent(of: .value) { (snapshot) in
    if snapshot.exists() {
        for child in snapshot.children {

Этоозначает, что child является снимком xPCdfc5d...Oms2.Затем вы получаете словарь свойств этого дочернего снимка и печатаете там свойство imageURL:

            let snap = child as! DataSnapshot
            let dict = snap.value as! [String: Any]
            let myPostURL = dict["imageURL"] as! String
            print("POST URL: " + myPostURL)

Но если вы внимательно следите в вашем JSON, узел xPCdfc5d...Oms2 не имеетсвойство imageURL.

У вас есть два динамических уровня ниже posts, поэтому вам нужно два вложенных цикла над значением:

postsRef.observeSingleEvent(of: .value) { (snapshot) in
    if snapshot.exists() {
        for userSnapshot in snapshot.children {              
            let userSnap = userSnapshot as! DataSnapshot
            for childSnapshot in userSnap.children {              
                let childSnap = childSnapshot as! DataSnapshot

                let dict = childSnap.value as! [String: Any]
                let myPostURL = dict["imageURL"] as! String
                print("POST URL: " + myPostURL)
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...