关于Moya
在OC中使用AFNetworking一般,Swift我们用Alamofire来做网络库.而Moya在Alamofire的基础上又封装了一层:
官方说moya有以下特性:
|
|
实现TargetType协议
|
|
配合RxSwift
Moya本身已经是一个使用起来非常方便,能够写出非常简洁优雅的代码的网络封装库,但是让Moya变得更加强大的原因之一还因为它对于Functional Reactive Programming的扩展,具体说就是对于RxSwift和ReactiveCocoa的扩展,通过与这两个库的结合,能让Moya变得更加强大。我选择RxSwift的原因有两个,一个是RxSwift的库相对来说比较轻量级,语法更新相对来说比较少,我之前用过ReactiveCocoa,一些大版本的更新需求重写很多代码,第二个更重要的原因是因为RxSwift背后有整个ReactiveX的支持,里面包括Java,JS,.Net, Swift,Scala,它们内部都用了ReactiveX的逻辑思想,这意味着你一旦学会了其中的一个,以后可以很快的上手ReactiveX中的其他语言。
Moya提供了非常方面的RxSwift扩展:
|
|
解释一下:
RxMoyaProvider是MoyaProvider的子类,是对RxSwift的扩展
filterSuccessfulStatusCodes()是Moya为RxSwift提供的扩展方法,顾名思义,可以得到成功地网络请求,忽略其他的
mapJSON()也是Moya RxSwift的扩展方法,可以把返回的数据解析成 JSON 格式
subscribe 是一个RxSwift的方法,对经过一层一层处理的 Observable 订阅一个 onNext 的 observer,一旦得到 JSON 格式的数据,就会经行相应的处理
addDisposableTo(disposeBag) 是 RxSwift 的一个自动内存处理机制,跟ARC有点类似,会自动清理不需要的对象。
配合HandyJSON
在实际应用过程中网络请求往往紧密连接着数据层(Model),具体地说,在我们的这个例子中,一般我们需要建立一个类用来统一管理数据,然后把得到的 JSON 数据映射到数据层(Model)。
|
|
然后创建ViewModel类,创建具体请求方法:
这里是为 RxSwift 中的 ObservableType和 Response写一个简单的扩展方法 mapModel,利用我们写好的Model 类,一步就把JSON数据映射成 model。
|
|
以上文章转载自 Three_Zhang’s Blog ,以做记录