我正在使用CoreLocation成功地确定用户的位置。但是,当我尝试使用CLLocationManagerDelegate方法时:
func locationManager(_ manager: CLLocationManager!, didFailWithError error: NSError!)我遇到了错误术语的问题。
func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
println("didFailWithError \(error)")
if let err = error {
if err.code == kCLErrorLocationUnknown {
return
}
}
}这将导致“使用未解析标识符kCLErrorLocationUnknown”错误消息。我知道kCLErrors是枚举,它们是在Swift中进化而来的,但我被困住了。
发布于 2014-07-01 12:09:47
用于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)
}
}较早的答案:核心位置错误代码定义为
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
// ...
}要将枚举值与整数err.code进行比较,可以使用toRaw():
if err.code == CLError.LocationUnknown.toRaw() { ...或者,您可以从错误代码中创建一个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")
}更新:在XCo6.1beta 2中,fromRaw()和toRaw()方法分别被init?(rawValue:)初始化器和rawValue属性所取代:
if err.code == CLError.LocationUnknown.rawValue { ... }
if let clErr = CLError(rawValue: code) { ... }发布于 2016-10-04 11:15:15
在Swift 3中,现在是:
if error._code == CLError.denied.rawValue { ... }发布于 2018-04-27 05:47:49
Swift 4.1:
func locationManager(_: CLLocationManager, didFailWithError error: Error) {
let err = CLError.Code(rawValue: (error as NSError).code)!
switch err {
case .locationUnknown:
break
default:
print(err)
}
}https://stackoverflow.com/questions/24509621
复制相似问题