Как реализовать комментарии через firebase - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь реализовать комментарии к feedMessages через базу данных firebase, но не знаю, как реализовать процедуру загрузки / выгрузки в коде.Если я хочу, чтобы моя база данных выглядела, как показано на рисунке, как я могу загрузить / загрузить эти комментарии к сообщениям?

func getFeedMessages(handler: @escaping (_ feedMessages:[FeedMessages]) -> ()){
        var feedMessagesArray = [FeedMessages]()
        REF_FEEDMESSAGES.observeSingleEvent(of: .value) { (feedMessagesSnapshot) in
            guard let feedMessagesSnapshot = feedMessagesSnapshot.children.allObjects as? [DataSnapshot] else {return}

            for messages in feedMessagesSnapshot {
                let content = messages.childSnapshot(forPath: "content").value as? String ?? "Joe Flacco is an elite QB"
                let icon = messages.childSnapshot(forPath: "icon").value as? String ?? "none"
                let color = messages.childSnapshot(forPath: "color").value as? String ?? "bop"

                let messages = FeedMessages(content: content, color: color, icon: icon, votes: votes)
                feedMessagesArray.append(messages)
            }
            handler(feedMessagesArray)
        }
    }




 func uploadMessage(withContent content: String, withIcon icon: String, withColor color: String,sendComplete: @escaping (_ status: Bool) -> ()){
        REF_FEEDMESSAGES.childByAutoId().updateChildValues(["content" : content, "color" : color, "icon" : icon)
        sendComplete(true)
    }

желаемая структура базы данных Firebase

1 Ответ

0 голосов
/ 29 сентября 2018

Ты супер близко!Узел комментариев на самом деле является просто дочерним снимком в каждом узле сообщения, так что вы можете рассматривать его как таковой.

Вот ваш код с дополнительным кодом для печати комментариев из каждого узла сообщения.

Вам понадобится добавить проверку ошибок и код для добавления их в FeedMessages.

feedMessagesRef.observeSingleEvent(of: .value) { feedMessagesSnapshot in
    guard let feedMessagesSnapshot = feedMessagesSnapshot.children.allObjects as? [DataSnapshot] else {return}

    for messages in feedMessagesSnapshot {
        let content = messages.childSnapshot(forPath: "content").value as? String ?? "Joe Flacco is an elite QB"
        let icon = messages.childSnapshot(forPath: "icon").value as? String ?? "none"
        let color = messages.childSnapshot(forPath: "color").value as? String ?? "bop"

        print(content, color, icon)

        let comments = messages.childSnapshot(forPath: "comments")
        for comment in comments.children {
            let commentSnap = comment as! DataSnapshot
            let aComment = commentSnap.value as! String
            print(aComment)
        }


        let messages = FeedMessages(content: content, color: color, icon: icon, votes: votes)
        feedMessagesArray.append(messages)
    }
}

Запись узла - это тот же мыслительный процесс - узел комментариев - это просто еще один ключ: пара значений в сообщении, причем значением является набор пар ключ: значение.

Вот пример, в котором мы используем словарь для построения структуры и затем пишем узел

let feedMessagesRef = self.ref.child("feedMessages")

let messageDict:[String: Any] = [
    "content": "some content",
    "color": "some color",
    "icon": "an icon",
    "comments":
        ["comment_0": "a comment",
         "comment_1": "another comment"]
]

let aFeedMessage = feedMessagesRef.childByAutoId()
aFeedMessage.updateChildValues(messageDict)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...