pod 'Moya/RxSwift'
數據請求回來在Moya和Your App之間加一層Rxjson
- 返回模型:
func homeListRequest(username: String, complete:@escaping ((Array<LGModel>) -> Void))
、
- 返回序列:
func homeListRequestOB(username: String) -> Observable<LGRsult>
//LGLoginClient.swift
import UIKit
import Moya
import RxSwift
import HandyJSON
class LGLoginClient: NSObject {
static let manager = LGLoginClient()
//MARK: - 首頁列表請求
func homeListRequest(username: String, complete:@escaping ((Array<LGModel>) -> Void)){
let provide = MoyaProvider<LGLoginAPI>()
_ = provide.rx.request(.homelist(username)).asObservable()
.mapModel(LGRsult.self)
.subscribe(onNext: { (model) in
if model.status == "請求成功" {
complete(model.models ?? [LGModel()])
}
})
}
//MARK: - 首頁列表請求
func homeListRequestOB(username: String) -> Observable<LGRsult>{
let provide = MoyaProvider<LGLoginAPI>()
return provide.rx.request(.homelist(username)).asObservable()
.mapModel(LGRsult.self)
}
}
複製代碼
- 給
Moya
中的Response
擴展ObservableType
協議,實現flatMap
extension ObservableType where E == Response {
public func mapModel<T: HandyJSON>(_ type: T.Type) -> Observable<T> {
return flatMap({ (response) -> Observable<T> in
return Observable.just(response.mapModel(T.self))
})
}
}
extension Response {
func mapModel<T: HandyJSON>(_ type: T.Type) -> T {
// 容錯,沒有數據返回!
if data.count < 1 {
print("序列化-模型化不了")
if let emptyValue = JSONDeserializer<T>.deserializeFrom(json: "{}"){
return emptyValue
} else if let emptyValue = JSONDeserializer<T>.deserializeFrom(json: "[{}]"){
return emptyValue
}
}
// 獲取請求response的data轉成json
let jsonString = String.init(data: data, encoding: .utf8)
if let model = JSONDeserializer<T>.deserializeFrom(json: jsonString) {
return model
}
return JSONDeserializer<T>.deserializeFrom(json: "{\"status\":\"請求有誤\"}")!
}
}
複製代碼