Если у вас такая же структура данных, вам не потребуется повторный запрос комментариев, поскольку они вложены в сообщения фида.Это потребует лишь небольшого разбора, который может быть облегчен для чтения и понимания с помощью нескольких расширений.
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) })
}
}