Swift, Как синхронизировать c функцию reverseGeocodeLocation (используя семафор или группу отправки .... et c) - PullRequest
0 голосов
/ 19 июня 2020

В viewDidLoad я вызываю reverseGeocodeLocation, чтобы получить географическую информацию. но это asyn c API, и мне нужен поток syn c. Однако мне не удалось синхронизировать c этот поток. потому что, когда я вставляю семафор в поток, обработчик завершения reverseGeocodeLocation не работает в случае потока принудительной синхронизации c. (Я использовал семафор для syn c). Он просто остановился, а completionHandler не вызывается. Что я должен делать? Спасибо за прочтение. Код ниже - мой образец.

let location = CLLocation(latitude: latitude, longitude: longitude)
  
  let semaphore = DispatchSemaphore(value: 0)
  
  CLGeocoder().reverseGeocodeLocation(location, completionHandler: { (placemarks, error) -> Void in
    print("completion")
    var placeMark: CLPlacemark! = placemarks?.first
    
    semaphore.signal()
  })
  semaphore.wait()

Прокомментируйте это сам. Невозможно использовать синхронный reverseGeocodeLocation.

Ссылка ниже (Apple publi c) объясняет.

https://developer.apple.com/documentation/corelocation/clgeocoder/1423621-reversegeocodelocation

Запросы геокодирования ограничена по скорости для каждого приложения, поэтому выполнение слишком большого количества запросов за короткий период времени может привести к сбою некоторых запросов. Когда максимальная частота превышена, геокодер передает объект ошибки со значением CLError.Code.network вашему обработчику завершения.

...