Я пытаюсь написать алгоритм для сортировки списка, и я использую сетевой вызов (запрос API) к API карт Google для получения информации о расстоянии между двумя точками в списке.
Я использую цикл while и перебираю список, пока размер списка не станет 0.
На каждой итерации я выполняю сетевой вызов, а после ответа я что-то удаляю из списка.
Я пытался использовать семафоры с кодом ниже, и он не работает, как ожидалось.
let semaphore = DispatchSemaphore(value: 1)
let dispatchQueue = DispatchQueue(label: "taskQueue")
dispatchQueue.async {
while unvistedPoints.count > 0{
print("The size of the list is ", unvisited.count)
self.findNextVistablePoint(visited: visitedPoints, unvisted: unvistedPoints, completion: { (pointToVisit) in
let indexofPointToVisit = unvistedPoints.firstIndex(where: {$0 === pointToVisit})
unvistedPoints.remove(at: indexofPointToVisit!)
visitedPoints.append(pointToVisit)
semaphore.signal()
})
semaphore.wait()
}
В заявлении на печать должно быть напечатано 6,5,4,3,2,1.