Самым простым решением является написание подпрограммы, которая рекурсивно выполняет запросы, например:
func performNextRequest(_ index: Int = 0) {
guard index < results.count else {
DispatchQueue.main.async {
// initiate whatever you want when this is done
self.reloadTableView()
}
return
}
performAsyncRequest(index) { [weak self] in
self?.performNextRequest(index + 1)
}
}
Более элегантным решением является использование некоторого асинхронного шаблона, такого как асинхронный подкласс Operation
или обещания.