Внедрение комментариев в фид пост в swift с использованием firebase - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь реализовать раздел комментариев для каждого поста фида в моем приложении, используя swift и firebase, но у меня проблемы с кодом, который получит комментарии.В моей функции он возвращает пустой массив messageComments, но я не знаю, что я делаю неправильно.Если я хочу, чтобы структура базы данных Firebase выглядела так, как показано на рисунке, как я могу реализовать код, который будет загружать эти комментарии в массив?

func getFeedMessages(handler: @escaping (_ feedMessages:[FeedMessages]) -> ()){
        var feedMessagesArray = [FeedMessages]()
        var commentArray = [messageComments]()
        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"


                self.REF_FEEDCOMMENTS.observeSingleEvent(of: .value, with: { (feedCommentsSnapshot) in
                    guard let feedCommentsSnapshot = feedCommentsSnapshot.children.allObjects as? [DataSnapshot] else {return}

                    for comments in feedCommentsSnapshot {
                        commentArray.append((comments.childSnapshot(forPath: "comments").value as? messageComments!)!)
                    }
                })



                print("             comment:        ")
                print(commentArray)
                let messages = FeedMessages(content: content, color: color, icon: icon, comments: commentArray)
                feedMessagesArray.append(messages)
            }
            handler(feedMessagesArray)
        }
    }

Desired firebase database structure

1 Ответ

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

Если у вас такая же структура данных, вам не потребуется повторный запрос комментариев, поскольку они вложены в сообщения фида.Это потребует лишь небольшого разбора, который может быть облегчен для чтения и понимания с помощью нескольких расширений.

extension DataSnapshot {
    var string: String? {
        return value as? String
    }
    var childSnapshots: [DataSnapshot] {
        return children.allObjects as? [DataSnapshot] ?? []
    }
    func child(_ path: String) -> DataSnapshot {
        return childSnapshot(forPath: path)
    }
}

Эти два расширения заботятся об операциях моментального снимка, необходимых для инициализации объектов.

extension MessageComments {
    convenience init(snapshot: DataSnapshot) {
        self.comments = snapshot.childSnapshots.map { $0.string }
    }
}

extension FeedMessages {
    convenience init(snapshot: DataSnapshot) {
        self.color = snapshot.child("color").string ?? "bop",
        self.comments = MessageComments(snapshot: snapshot.child("comments"))
        self.content = snapshot.child("content").string ?? "Joe Flacco is an elite QB",
        self.icon = snapshot.child("icon").string ?? "none",
    }
}

Просто сопоставьте дочерние снимки, чтобы инициализировать каждый из них как FeedMessages объект.

func getFeedMessages(handler: @escaping (_ feedMessages: [FeedMessages]) -> ()) {
    REF_FEEDMESSAGES.observeSingleEvent(of: .value) {
        handler($0.childSnapshots.map { FeedMessages(snapshot: $0) })
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...