Alamofire 2,如何获得NSError?

Upv*_*ote 4 swift alamofire swift2

在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)
        }
    }
Run Code Online (Sandbox Code Playgroud)

错误ErrorType类型,它的唯一成员是debugDescription,它打印:

可选(错误域= NSURLErrorDomain代码= -1009"Es besteht anscheinend keine Verbindung zum Internet."UserInfo = {NSUnderlyingError = 0x135f4e7c0 {Error 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 Internet.})

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

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

error.localizedDescription
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*n R 7

"Alamofire 2.0迁移指南"中,声明了一种新的结果类型

public enum Result<Value> {
    case Success(Value)
    case Failure(NSData?, ErrorType)
}
Run Code Online (Sandbox Code Playgroud)

介绍了,Alamofire仍然只生成NSError对象.

"为什么以及如何将任何ErrorType始终转换为NSError?" Apple Stuff的成员证实,ErrorType总是可以投射到NSError:

...这个工作的原因是因为"编译魔术".编译器自动发出在任何ErrorType和NSError之间进行转换所需的代码.

因此,这会在快速测试中编译并打印预期结果(例如"无法连接到服务器".):

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