RXSwift学习(2)—网络请求Moya的基本使用

975 阅读2分钟

Moya的基本介绍

Moya是一个基于Alamofire的Networking library,并且添加了对于ReactiveCocoa和RxSwift的接口支持,大大简化了开发过程,是Reactive Functional Programming的网络层首选。

Moya使用的注意事项

我在使用CocoaPods的时候,以为在RXSwift中使用的就是Moya,直接pod 'Moya',导致我在下边使用出现了问题,不能够调用起该用的方法。后来看官方文档,才发现,Moya是有分类的,在RXSwift中使用的时候,需要导入的是pod 'Moya/RxSwift',使用的时候一定要注意,Gitub上有一些关键性的介绍,可以前往观看Moya

Moya的基本使用

1.首先我们需要声明一个enum,来对请求进行明确分类。

enum APIManager {

case GetHomeList // 获取首页列表

case GetHomeDetail(Int) // 获取详情页

}

在这里需要将不同的请求分类,放到枚举中

2.我们需要让这个enum遵守TargetType协议,在这个协议中可以看到 TargetType定义了我们发送一个网络请求所需要的东西,baseURL,parameter,method等一些计算性属性,我们要做的就是去实现这些东西,当然有带默认值的我们可以不去实现。

`extension APIManager:TargetType{

var baseURL: URL {
    return URL.init(string: "http://m2.qiushibaike.com/article/list")!
}

var path: String {
    switch self {
    case .GetHomeList:
        return "/imgrank"
    case .GetHomeDetail(let id):
        return "4/theme/\(id)"
}
}
// 区分get和post
var method: Moya.Method {
    return .get
}
//Provides stub data for use in testing
var sampleData: Data {
    return "".data(using: String.Encoding.utf8)!
}
// The type of HTTP task to be performed.
var task: Task {
    return .requestPlain
}
// The headers to be used in the request.
var headers: [String : String]? {
    return ["Content-Type": "application/json"]
}

}` 写好上边的我们就可以进行请求了

let provider = MoyaProvider<APIManager>()

provider.rx.request(.GetHomeList)

    .filterSuccessfulStatusCodes()
    .mapJSON()
        .subscribe(onSuccess: { (result) in
            print(result)
        }) { (error) in
            print(error)
    }`

** 特别注意的是,过去的版本Moya中有一个MoyaProvider有一个子类RxMoyaProvider,过去都是通过它跟RXSwift合作,进行网络请求,但是后来的版本把他给取消了,通过rx来联络 **

但是如果一开始pod 'Moya'的话,是找不到上边的那些方法的,只能是这样了

provider.request(.GetHomeList) { (result) in print("\(result)") }

RxMoyaProvider是MoyaProvider的子类,是对RxSwift的扩展 filterSuccessfulStatusCodes() 是Moya为RxSwift提供的扩展方法,顾名思义,可以得到成功成功地网络请求,忽略其他的

mapJSON() 也是Moya RxSwift的扩展方法,可以把返回的数据解析成 JSON 格式 会返回一个Observable

然后我们就可以对这个Observable进行订阅了

然后我们就可以得到下边的json数据 只展示了部分数据

学习参考文档

RxSwift+Moya+ObjectMapper优雅的网络请求及模型转换

Moya/Moya

如何写出最简洁优雅的网络封装 Moya + RxSwift

【iOS开发】Moya入坑记-用法解读篇

中文文档阅读