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.任何想法?
在"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)
| 归档时间: |
|
| 查看次数: |
3874 次 |
| 最近记录: |