Я использую группу отправки wait()
, которая блокирует мой цикл for
от завершения кода до тех пор, пока набор задач urlsession
(в другом цикле с обработчиком завершения) не будет завершен перед добавлением нового элемента в мой массив
текущий код завершит первый цикл до завершения второго цикла urlClass.selectfoodURL
Я хочу добавить массив в историю еды после завершения цикла urlfood for из-за того, что проблема в моем подходе к использованию групп отправки - это wait()
, когда моя выбранная еда называется urlsession
застрял и не завершается с group.wait
func userSnackHistoryArray() {
let group = DispatchGroup()
let Arrays // array of dictionary
for array in Arrays {
var generateMeal = MealDetails() // struct type
do {
let aa = try JSONDecoder().decode(userSnack.self, from: array)
generateMeal.names = convertToJsonFile.type
for name in generateMeal.names!{
group.enter()
urlClass.selectfoodURL(foodName: name){ success in
generateMeal.units!.append(allVariables.selectedUnit)
group.leave()
}
}
// my select food is called but the urlsession stuck and doesnt complete with group.wait is active
// group.wait()
mealHistory.append(generateMeal)
} catch { }
}
group.notify(queue: .main){
print("complete")
}
}
Я сократил свой код, чтобы сосредоточиться на проблеме. Я могу разделить свой код на две функции и решить проблему, но я хочу использовать только одну функцию. Есть предложения или идеи?