RxSwift

Maya提供了一个可选的MoyaProvider 子类 - RxMoyaProvider。在网络请求完成时,我们不再使用 request() 函数的回调闭包,而是使用 Observable

RxMoyaProvider 可以像 MoyaProvider 一样创建和使用:

let provider = RxMoyaProvider<GitHub>()

然后,你就可以干很多事情:

provider.request(.Zen).subscribe { (event) -> Void in
switch event {
case .Next(let response):
// do something with the data
case .Error(let error):
// handle the error
default:
break
}
}

对于 RxMoyaProvider,在请求被订阅前,不会发起网络请求。如果网络请求完成之前,订阅的信号被销毁了,请求将被取消。

如果请求正常完成,将会发生两件事:

  1. observable 发送一个 Moya.Response 类型的值 。
  2. observable 结束.

如果请求发生了错误(通常是NSURLSession错误),错误码是网络请求失败的status code,如果有的话,和response data,如果也有的话。

Moya.Response 类型包含一个 statusCode ,一些 data,和一个可以为空的 NSURLResponse。不管你习惯 subscribeNext 还是 map ,都可以使用这些数据。

更棒的是,Moya提供了一些Observable 的扩展,让你更简单的处理 MoyaResponses

  • filterStatusCodes() 提供了一系列status code。如果返回的status code不在其中,将生成一个error。
  • filterStatusCode() 用于查找特殊的status cod,如果没有找到,将生成error。
  • filterSuccessfulStatusCodes() 筛选200系列的status codes。
  • filterSuccessfulStatusAndRedirectCodes() 筛选200-300系列的status codes。
  • mapImage() 尝试将返回数据转换成 UIImage,失败的话将生成error。
  • mapJSON() 尝试将返回数据转换成 JSON对象,失败的话将生成error。
  • mapString()尝试将返回数据转换成字符串,失败的话将生成error。

在网络请求错误的情况下,error的 domainMoyaErrorDomain。 通常code是 MoyaErrorCoderawValue。底层的errors提供了原始的返回数据,在 NSErroruserInfo 中,关键字为"data"。

转载请注明出处http://www.cnblogs.com/liuliuliu/p/5626788.html,并注明转载。

原文链接

翻译: bibibi_liuliu

联系方式: 395985239@qq.com

最新文章

  1. java常用英文解释
  2. 如何让UIView中的Button点击之后跳转到另一个ViewController上去,ViewController上也有一个按钮 可以返回
  3. logstash使用操作部分
  4. 【原创】Js:日期处理(日期格式必须【yyyy-mm-dd】才能转成long的毫秒!其他的不是【年-月-日】的格式,结果会是【NaN】)
  5. Helpers\RainCaptcha
  6. freemarker的使用心得
  7. Windows下更改MySQL数据库的存储位置
  8. android 报错之noclassdeffounderror
  9. SpringCloud学习笔记(7)——Sleuth
  10. CXF 开发 REST 服务
  11. flask(二)之Jinja2模板与Flask-WTF
  12. Hbase CMS GC 调优。
  13. Elasticsearch学习系列之term和match查询
  14. [rrdtool]监控和自己主动绘图,简单的监控.md
  15. Highcharts 多个Y轴动态刷新数据
  16. Linux 常用的压缩命令有 gzip 和 zip
  17. python+scrapy 爬取西刺代理ip(一)
  18. Spring Boot中使用Redis小结
  19. web development blog(转)
  20. k8s PersistentVolume hostpath 简单使用

热门文章

  1. 【第五章】 springboot + mybatis
  2. 3、CommonChunkPlugin提取公共js-以提取一个jquery为例
  3. java 类构造器中加入有参构造器及调用顺序【思路】
  4. 【异常记录(九)】 System.Threading.ThreadAbortException: 正在中止线程
  5. 05_Kafka Python_Consumer模拟
  6. c assert 用法
  7. python sort、sorted
  8. gulp4小demo
  9. chrome的url列表里面也找不到chrome://plugins的原因
  10. 字符集(编码)转换_Windows