Я пытаюсь получить информацию из FireMase FireStore в XCode, поместить ее в список, а затем отобразить ее в CollectionView.
В моем FireStore у меня есть 2 коллекции, пользователи и места Коллекция пользователей: есть пользователь информация и коллекция идентификаторов мест, которые они посетили. Коллекция мест: содержит информацию о месте, включая идентификатор места
. Поэтому, если пользователь вошел в систему, я буду отображать его места в CollectionView, используя идентификаторы мест в коллекции пользователя для получения информации о мест из коллекции мест.
Итак, я сделал два вложенных запроса: один для получения идентификаторов мест у пользователя, второй - для сопоставления идентификаторов и получения информации из коллекции мест. Этот код работал, но он очень медленный, и код продолжает выполняться и завершается sh до получения всей информации, поэтому список остается пустым в CollectionView.
db.collection("users").document(userID).collection("placesList").getDocuments(){ (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for userdocument in querySnapshot!.documents {
self.db.collection(“Places”).document(userdocument.documentID+"").getDocument(){ (document, error) in
if let document = document, document.exists {
let place = Place(ID: document.documentID, name: document.get("name") as! String, rate: document.get("rating") as! Double, long: document.get("longitude") as! Double, lat:document.get("latitude") as! Double)
self.list.append(place)
} else {
print("Document does not exist")
}//end else
}
}//end second query
}//end else
}// end first query
Я не понимаю проблемы с этим кодом, есть ли лучший способ сделать это ?! Или как мне остановить выполнение кода перед завершением запросов?