Alamofire 2,如何获得NSError?

时间:2015-09-19 11:58:19

标签: swift swift2 alamofire

在alamofire 2中,他们介绍了结果类型:

Alamofire.request(.GET, URLString, parameters: ["foo": "bar"])
    .responseJSON { request, response, result in
        switch result {
        case .Success(let JSON):
            print("Success with JSON: \(JSON)")
        case .Failure(let data, let error):
            print(error)
        }
    }

错误的类型为 ErrorType ,其唯一的成员是 debugDescription ,其中会打印:

  

可选(错误域= NSURLErrorDomain代码= -1009“Es besteht   anscheinend keine Verbindung zum Internet。“   UserInfo = {NSUnderlyingError = 0x135f4e7c0 {错误   Domain = kCFErrorDomainCFNetwork Code = -1009“(null)”   UserInfo = {_ kCFStreamErrorCodeKey = 8,_kCFStreamErrorDomainKey = 12}},   NSErrorFailingURLStringKey = myurl,   NSErrorFailingURLKey = myurl,   _kCFStreamErrorDomainKey = 12,_kCFStreamErrorCodeKey = 8,NSLocalizedDescription = Es besteht anscheinend keine Verbindung zum   因特网。})

如何从错误而不是整个调试消息中获取NSLocalizedDescription?

在alamofire 1中,错误属于NSError类型,可能会收到错误消息:

error.localizedDescription
然而,这似乎是不可能的alamofire 2.任何想法?

3 个答案:

答案 0 :(得分:7)

"Alamofire 2.0 Migration Guide"中声明了新的结果类型

public enum Result<Value> {
    case Success(Value)
    case Failure(NSData?, ErrorType)
}

被引入,Alamofire仍然只生成NSError对象。

"Why and how any ErrorType can always be casted to NSError?"成员中 Apple Stuff确认始终可以投射ErrorTypeNSError

  

......这种作用的原因是因为编译器的魔法。&#34;编译器   自动发出在任何之间进行翻译所需的代码   ErrorType和NSError。

因此,这将快速编译并打印预期结果 测试(例如&#34;无法连接到服务器。&#34;):

switch result {
case .Success(let JSON):
    print("Success with JSON: \(JSON)")
case .Failure(let data, let error):
    print((error as NSError).localizedDescription)
}

答案 1 :(得分:2)

ErrorType可以转换为NSError。试试这个:

Alamofire.request(.GET, URLString, parameters: ["foo": "bar"])
    .responseJSON { request, response, result in
        switch result {
        case .Success(let JSON):
            print("Success with JSON: \(JSON)")
        case .Failure(let data, let error):
            if let error = error as NSError? {
                print(error.localizedDescription)
            }
        }
    }

答案 2 :(得分:0)

它是错误对象上的字符串:

error.localizedDescription