В 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 вашему обработчику завершения.