#swift #for-loop #google-cloud-firestore
#swift #для цикла #google-cloud-firestore
Вопрос:
Ниже приведен раздел запроса, который я пытаюсь выполнить в Swift.
Чего я не могу понять, так это почему :
room = Room(images: images, name: name)
rooms.append(room)
выполняется до:
imageQuery.getDocuments()
{
(QuerySnapshot, err) in
if let err = err{}
else
{
for document in QuerySnapshot!.documents
{
let imageURL = document.data()["imageURL"] as? String ?? ""
let image = ImageModel(imageURL: imageURL, date: Date(timeIntervalSinceNow: 0))
images.append(image)
}
Второй фрагмент кода выполняется, но он выполняется после первого фрагмента. Но мне нужны значения из второго, чтобы заполнить значения в первом. Я не новичок в программировании, но я новичок в swift, и, похоже, я не могу понять, как заставить внешний цикл перейти во внутренний цикл перед запуском остальной части его кода. Спасибо за вашу помощь!
Вот большая часть функции:
let roomQuery = projectRef.document(document.documentID).collection("Rooms")
roomQuery.getDocuments()
{
(QuerySnapshot, err) in
if let err = err{}
else
{
var room:Room
for document in QuerySnapshot!.documents
{
let name = document.data()["name"] as? String ?? ""
var images = [ImageModel]()
let imageQuery = roomQuery.document(document.documentID).collection("Images")
imageQuery.getDocuments()
{
(QuerySnapshot, err) in
if let err = err{}
else
{
for document in QuerySnapshot!.documents
{
let imageURL = document.data()["imageURL"] as? String ?? ""
let image = ImageModel(imageURL: imageURL, date: Date(timeIntervalSinceNow: 0))
images.append(image)
}
}
}
room = Room(images: images, name: name)
rooms.append(room)
}
}
Комментарии:
Ответ №1:
поскольку вы используете замыкание, а не цикл, поэтому оно выполняется асинхронно