Существует структура, которая содержит структуры в виде массива.Чтобы заполнить ядро, я должен сначала заполнить внутренние и назначить их основному.Для этого я использовал Dispatch Group () и уведомления для добавления и записи в основную структуру, с которой я буду работать.Ниже приведен код, который я использую.
Но в результате этого метода у меня возникла проблема.Уведомление выполняется раньше, чем необходимо.Что я тут не так сделал?
Вот вывод с консоли:
DONE
[]
FBRecipe(name: "Eel kebab", count: "2", complexity: "3.75", time: "2", category: "Завтрак", type: "САЛАТЫ", about: "Lsvdvskld v\t", ingredient: [], cook: [], photo: [], idOwner: "XT2pgRnAZ8Q5pHH3dHsz5jYUZ613", shared: "0", planing: "0", timestamp: "1536761784.24662")
ingredinet
ingredinet
ingredinet
...
let loadRecipesGroup = DispatchGroup()
let loadItemsQueue = DispatchQueue(label: "ru.bryzgalov.cookbook.loadrecipes", qos: .userInteractive, attributes: [], autoreleaseFrequency: .workItem)
...
func loadRecipeList() {
var recipe = [FBRecipe]()
db.collection("RECIPES").getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for documentRecipe in querySnapshot!.documents {
self.loadItemsQueue.async {
var ingredinet = [FBIngredient]()
var stage = [FBStage]()
var photo = [FBDishPhoto]()
db.collection("RECIPES/\(documentRecipe.documentID)/INGREDIENT").getDocuments(completion: { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for documentIngredient in querySnapshot!.documents {
self.loadItemsQueue.async(group: self.loadRecipesGroup) {
let newIngredinet = FBIngredient(dict: documentIngredient.data() as Dictionary<String,AnyObject>)
ingredinet.append(newIngredinet)
print("ingredinet")
}
}
}
})
db.collection("RECIPES/\(documentRecipe.documentID)/STAGE").getDocuments(completion: { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for documentStage in querySnapshot!.documents {
self.loadItemsQueue.async(group: self.loadRecipesGroup) {
let newStage = FBStage(dict: documentStage.data() as Dictionary<String,AnyObject>)
stage.append(newStage)
}
}
}
})
db.collection("RECIPES/\(documentRecipe.documentID)/PHOTO").getDocuments(completion: { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for documentDishPhoto in querySnapshot!.documents {
self.loadItemsQueue.async(group: self.loadRecipesGroup) {
let newDishPhoto = FBDishPhoto(dict: documentDishPhoto.data() as Dictionary<String,AnyObject>)
photo.append(newDishPhoto)
}
}
}
})
self.loadRecipesGroup.notify(queue: .main) {
var newRecipe = FBRecipe(dict: documentRecipe.data() as Dictionary<String,AnyObject>)
newRecipe.ingredient = ingredinet
newRecipe.cook = stage
newRecipe.photo = photo
// recipe.append(contentsOf: newRecipe)
print(ingredinet)
print(newRecipe)
}
}
print("DONE")
}
}
}
}