Вопрос проверяет умение синхронизировать несколько асинхронных операций и дождаться их завершения.
Создаётся DispatchGroup, перед каждой асинхронной задачей вызывают group.enter(), а внутри её завершения — group.leave(). После добавления всех задач можно вызвать group.notify(queue:) или group.wait(), чтобы выполнить код, когда все задачи завершатся.
Создание группы:
let group = DispatchGroup()Добавление задач:
for url in urls {
group.enter()
URLSession.shared.dataTask(with: url) { data, _, _ in
// обработка data
group.leave()
}.resume()
}Ожидание завершения:
group.notify(queue: .main) {
print("Все запросы выполнены")
}или
group.wait() // блокирует текущий поток (не рекомендуется в UI-потоке)Вывод:DispatchGroup позволяет легко синхронизировать набор асинхронных задач и выполнять последующий код только после их завершения, без сложной ручной логики подсчёта.