swift ios8 nserror didfailwitherror

Swift: Corelocation que maneja NSError en didFailWithError



ios8 (2)

Estoy usando CoreLocation para determinar con éxito la ubicación del usuario. Sin embargo, cuando intento utilizar el método CLLocationManagerDelegate:

func locationManager(_ manager: CLLocationManager!, didFailWithError error: NSError!)

Me encuentro con problemas con el término de error.

func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) { println("didFailWithError /(error)") if let err = error { if err.code == kCLErrorLocationUnknown { return } } }

Esto da como resultado un mensaje de error "Uso del identificador no resuelto kCLErrorLocationUnknown". Sé que los kCLErrors son enumeraciones y que han evolucionado en Swift pero estoy estancado.


Los códigos de error de la ubicación central se definen como

enum CLError : Int { case LocationUnknown // location is currently unknown, but CL will keep trying case Denied // Access to location or ranging has been denied by the user // ... }

y para comparar el valor de enumeración con el entero err.code , toRaw() se puede usar:

if err.code == CLError.LocationUnknown.toRaw() { ...

Alternativamente, puede crear un CLError partir del código de error y verificar que para los valores posibles:

if let clErr = CLError.fromRaw(err.code) { switch clErr { case .LocationUnknown: println("location unknown") case .Denied: println("denied") default: println("unknown Core Location error") } } else { println("other error") }

ACTUALIZACIÓN: En Xcode 6.1 beta 2, los fromRaw() y toRaw() han sido reemplazados por un init?(rawValue:) y una propiedad rawValue , respectivamente:

if err.code == CLError.LocationUnknown.rawValue { ... } if let clErr = CLError(rawValue: code) { ... }


En Swift 3 es ahora:

if error._code == CLError.denied.rawValue { ... }