在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.任何想法?
答案 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确认始终可以投射ErrorType
到NSError
:
......这种作用的原因是因为编译器的魔法。&#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