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

Swift网络封装库Moya中文手册之RxSwift的更多相关文章

  1. Swift网络封装库Moya中文手册之Authentication

    Authentication 安全验证可能有点复杂,一些网络请求需要认证,这里我们讨论两种常见的. Basic HTTP Auth HTTP auth是HTTP协议自带的用户名/密码验证.如果你使用的 ...

  2. Swift网络封装库Moya中文手册之Endpoints

    Endpoints Endpoint是一种半私有的数据结构,Moya用来解释网络请求的根本构成.一个endpoint储存了以下数据: The URL. The HTTP method (GET,POS ...

  3. Swift网络封装库Moya中文手册之Plugins

    Plugins Moya plugins用于反映请求的发起或接收.Plugins定义为 PluginType 属性,可以在请求准备发起和接收到返回数据时回调. Built in plugins Moy ...

  4. Swift网络封装库Moya中文手册之Providers

    Providers 使用Moya,你可以通过一个 MoyaProvider 的实例发送所有网络请求,通过枚举来指定你要访问的具体API.在配置你的 Endpoint 之后,你差不多就做好了基础配置: ...

  5. Swift网络封装库Moya中文手册之Targets

    Targets 使用Moya,我们首先需要定义一个target - 这通常是继承 TargetType 协议的 枚举 变量.接下来,你的app只需要处理这些targets,也就是一些你希望调用API完 ...

  6. EasyX库简单中文手册

    EasyX库简单中文手册 作者: 时间: 2021/2/2 第一个例程 #include <graphics.h> // 图像相关库 #include <conio.h> // ...

  7. Swift:网络库Alamofire

    一,Alamofire的说明与配置 1,什么是Alamofire (1)Alamofire 的前身是 AFNetworking.AFNetworking 是 iOS 和 OS X 上很受欢迎的第三方H ...

  8. swift中第三方网络请求库Alamofire的安装与使用

    swift中第三方网络请求库Alamofire的安装与使用 Alamofire是swift中一个比较流行的网络请求库:https://github.com/Alamofire/Alamofire.下面 ...

  9. Swift中文手册 -- The Basics

    原文:Swift中文手册 -- The Basics 基础部分 Swift 是 iOS 和 OS X 应用开发的一门新语言.然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 S ...

随机推荐

  1. Apache Kylin1.5.2.1之订单案例详细构建流程

    转:http://blog.itpub.net/30089851/viewspace-2122586/ 一.Hive订单数据仓库构建1. 创建事实表并插入数据 DROP TABLE IF EXISTS ...

  2. 操作构造字符串化宏#define STRINGIZE(x) #x

    c++test工程单元测试中报错 “STRINGIZE” 未定义错误 解决方案:在头文件定义宏STRINGIZE #符号把一个符号直接转换为字符串,例如:#define STRINGIZE(x) #x ...

  3. 改变checkbox样式问题

    选择1   选择2 选择3 选择4 选择5 <form action=""> <label for="test">选择1 <inp ...

  4. 文件查找:locate、find

    文件查找:在文件系统上查找符合条件的文件: locate, find 非实时查找(数据库查找):locate  //不是遍历系统文件,把当前系统目录下的所有文件抽取出来制作成一个索引(或者叫数据库), ...

  5. ng-model 数据不更新 及 ng-repeat【ngRepeat:dupes】错误

    一.ng-include 引入的文件中 ,ng-model 数据不更新 例如, $scope.username = “Jones”  .此时,在 ng-include 引入的文件中,直接使用 ng-m ...

  6. async 和 await的前世今生 (转载)

    async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐 ...

  7. Index.cshtml”处的视图必须派生自 WebViewPage 或 WebViewPage<TModel>。

    解决方案: 1,在每个视图上面添加 @inherits System.Web.Mvc.WebViewPage 2,将views中的web.config COPY到新的视图模版文件夹下,就可以了

  8. TinyXml节点查找及修改

    参考:http://blog.csdn.net/zww0815/article/details/8083550 // 读者对象:对TinyXml有一定了解的人.本文是对TinyXml工具的一些知识点的 ...

  9. 《F4+2》—团队项目系统设计改进与详细设计

    一.团队项目系统设计改进: 1.分析项目系统设计说明书初稿的不足,特别是软件系统结构模型建模不完善内容 在上一次的项目系统设计说明书中没有很好的完成软件系统结构模型的建模设计,只做了基本的系统项目原型 ...

  10. spring boot 开发 ajax返回值报错

    org.thymeleaf.exceptions.TemplateInputException: Error resolving template "succeed", templ ...