RXSwift學習(2)—網路請求Moya的基本使用

一個蘿蔔壹個坑發表於2017-12-26

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入坑記-用法解讀篇

中文文件閱讀

相關文章