用 RxSwift + Moya 写出优雅的网络请求代码

431 查看

RxSwift

Rx 是微软出品的一个 Funtional Reactive Programming 框架,RxSwift 是它的一个 Swift 版本的实现。
RxSwift 的主要目的是能简单的处理多个异步操作的组合,和事件/数据流。
利用 RxSwift,我们可以把本来要分散写到各处的代码,通过方法链式调用来组合起来,非常的好看优雅。

举个例子,有如下操作:
点击按钮 -> 发送网络请求 -> 对返回的数据进行某种格式处理 -> 显示在一个 UILabel 上

代码如下:

是不是看上去很优雅呢?

另外这篇文章中也有一个类似的例子:

112564398-fbac92b6b8684c36

对应的代码是:

用一连串的链式调用就把一系列事件处理了,是不是很不错。

Moya

Moya 是 Artsy 团队的 Ash Furrow 主导开发的一个网络抽象层库。它在 Alamofire 基础上提供了一系列简单的抽象接口,让客户端代码不用去直接调用 Alamofire,也不用去关心 NSURLSession。同时提供了很多实用的功能。
它的 Target -> Endpoint -> Request 模式也使得每个请求都可以自由定制。

下面进入正题:

创建一个请求

Moya 的 TargetType 协议规定的创建网络请求的方法,用枚举来创建,很有 Swift 的风格。

创建数据模型

数据模型的创建用了 SwiftyJSONMoya_SwiftyJSONMapper,方便将 JSON 直接映射成 Model 对象。

发送请求

我们可使用 Moya 自带一个 RxSwift 的扩展来发送请求。