Mag*_*nas 15 nserror didfailwitherror swift ios8
我正在使用CoreLocation来成功确定用户的位置.但是,当我尝试使用CLLocationManagerDelegate方法时:
func locationManager(_ manager: CLLocationManager!, didFailWithError error: NSError!)
Run Code Online (Sandbox Code Playgroud)
我遇到了错误术语的问题.
func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
println("didFailWithError \(error)")
if let err = error {
if err.code == kCLErrorLocationUnknown {
return
}
}
}
Run Code Online (Sandbox Code Playgroud)
这会导致"使用未解析的标识符kCLErrorLocationUnknown"错误消息.我知道kCLErrors是枚举,并且它们已经在Swift中进化但我被卡住了.
Mar*_*n R 32
更新Swift 4:错误现在传递给回调error: Error,可以转换为CLError:
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
if let clErr = error as? CLError {
switch clErr {
case CLError.locationUnknown:
print("location unknown")
case CLError.denied:
print("denied")
default:
print("other Core Location error")
}
} else {
print("other error:", error.localizedDescription)
}
}
Run Code Online (Sandbox Code Playgroud)
较旧的答案:核心位置错误代码定义为
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
// ...
}
Run Code Online (Sandbox Code Playgroud)
并将枚举值与整数进行比较err.code,toRaw()
可以使用:
if err.code == CLError.LocationUnknown.toRaw() { ...
Run Code Online (Sandbox Code Playgroud)
或者,您可以CLError从错误代码创建一个并检查可能的值:
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")
}
Run Code Online (Sandbox Code Playgroud)
更新:在Xcode 6.1 beta 2中,fromRaw()和toRaw()方法分别被init?(rawValue:)初始化程序和rawValue属性替换:
if err.code == CLError.LocationUnknown.rawValue { ... }
if let clErr = CLError(rawValue: code) { ... }
Run Code Online (Sandbox Code Playgroud)
小智 7
在Swift 3中它现在是:
if error._code == CLError.denied.rawValue { ... }
Run Code Online (Sandbox Code Playgroud)