首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift: NSError在didFailWithError中的协同迁移处理

Swift: NSError在didFailWithError中的协同迁移处理
EN

Stack Overflow用户
提问于 2014-07-01 11:52:33
回答 3查看 7.5K关注 0票数 22

我正在使用CoreLocation成功地确定用户的位置。但是,当我尝试使用CLLocationManagerDelegate方法时:

代码语言:javascript
复制
func locationManager(_ manager: CLLocationManager!, didFailWithError error: NSError!)

我遇到了错误术语的问题。

代码语言:javascript
复制
func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
    println("didFailWithError \(error)")

    if let err = error {
        if err.code == kCLErrorLocationUnknown {
            return
        }
    }
}

这将导致“使用未解析标识符kCLErrorLocationUnknown”错误消息。我知道kCLErrors是枚举,它们是在Swift中进化而来的,但我被困住了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-01 12:09:47

用于Swift 4:更新错误现在以error: Error的形式传递给回调,可以转换为CLError

代码语言:javascript
复制
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)
    }
}

较早的答案:核心位置错误代码定义为

代码语言:javascript
复制
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()

代码语言:javascript
复制
if err.code == CLError.LocationUnknown.toRaw() { ...

或者,您可以从错误代码中创建一个CLError,并检查它的可能值:

代码语言:javascript
复制
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属性所取代:

代码语言:javascript
复制
if err.code == CLError.LocationUnknown.rawValue { ... }

if let clErr = CLError(rawValue: code) { ... }
票数 46
EN

Stack Overflow用户

发布于 2016-10-04 11:15:15

在Swift 3中,现在是:

代码语言:javascript
复制
if error._code == CLError.denied.rawValue { ... }
票数 7
EN

Stack Overflow用户

发布于 2018-04-27 05:47:49

Swift 4.1:

代码语言:javascript
复制
func locationManager(_: CLLocationManager, didFailWithError error: Error) {
    let err = CLError.Code(rawValue: (error as NSError).code)!
    switch err {
    case .locationUnknown:
        break
    default:
        print(err)
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24509621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档