В этом вопросе есть немного постороннего кода, поэтому он не совсем понятен, но кажется, что вы хотите перебрать массив ключей документа, прочитать каждый связанный документ и добавить свойства в массив (или в вашем случае создать объект на основена эти свойства и добавьте его)
Вот простой пример, читающий серию постов и добавляющий текст поста к каждому посту в массиве.
Структура:
posts //a collection
post_0
post_text: "A post"
post_1
post_text: "Another post"
post_2
post_text: "Cool post"
и код для чтения в post_0 и post_2 и добавления текста сообщения в массив
var postTextArray = [String]()
func readMultiplePosts() {
let postKeyArray = ["post_0", "post_2"]
for postKey in postKeyArray {
let docRef = self.db.collection("posts").document(postKey)
docRef.addSnapshotListener { documentSnapshot, error in
guard let document = documentSnapshot else {
print("err fetchibng document")
return
}
guard let data = document.data() else {
print("doc was empty")
return
}
print("doc data: \(data)")
let post = document.get("post_text") as! String
self.postMsgArray.append(post)
}
}
}
, а затем через некоторое время мы хотим напечатать текст сообщения
for p in self.postMsgArray {
print(p)
}
ивывод из консоли
A post
Cool post
Пока это решение работает, Firebaser быстро укажет, что чтение таких данных в тесном цикле обычно не рекомендуется.Было бы лучше иметь некоторую другую корреляцию между сообщениями, которые вы хотите прочитать, а затем выполнить запрос, чтобы прочитать их.