Коды ошибок CLGeocoder().geocodeAddressString

#swift #xcode #error-handling #clgeocoder

#быстрый #xcode — код #обработка ошибок #клгеокодер

Вопрос:

Я работаю над проектом, в котором я использую CLGeocoder для определения меток для определенного местоположения. Очень простой вызов, подобный этому.

 CLGeocoder().geocodeAddressString(location) { (placemarks, error) in
            if let error = error {
                print(error.localizedDescription)
            }
 

Вместо того, чтобы распечатывать localizedDescription ошибки localizedDescription, я хотел бы иметь возможность записывать код ошибки и реагировать соответствующим образом. Например, если местоположение не может быть найдено, выводится мое localizedDescription

 The operation couldn’t be completed. (kCLErrorDomain error 8.)
 

Как я могу в Swift определить код CLError, чтобы мне не приходилось включать какое-то локализованное описание, которое будет меняться в зависимости от языка пользователя?
Можно ли это сделать?
У меня есть только пара дел, которые я хочу включить.

Ответ №1:

Вам нужно привести ошибку как CLError , а затем переключить ошибку code :

 if let error = error as? CLError { 
    switch error.code {
    case .locationUnknown:
        print("locationUnknown: location manager was unable to obtain a location value right now.")
    case .denied:
        print("denied: user denied access to the location service.")
    case .promptDeclined:
        print("promptDeclined: user didn’t grant the requested temporary authorization.")
    case .network:
        print("network: network was unavailable or a network error occurred.")
    case .headingFailure:
        print("headingFailure: heading could not be determined.")
    case .rangingUnavailable:
        print("rangingUnavailable: ranging is disabled.")
    case .rangingFailure:
        print("rangingFailure: a general ranging error occurred.")
    default : break
    }
}