RxSwift + Moya + ObjectMapper

卧疾丰暇豫,翰墨时间作。这篇文章主要讲述RxSwift + Moya + ObjectMapper相关的知识,希望能为你提供帮助。
 
 
https://www.jianshu.com/p/173915b943af
 

use_frameworks!target ‘RXDemo‘ do pod ‘RxSwift‘ pod ‘RxCocoa‘ pod ‘Moya-ObjectMapper/RxSwift‘ pod ‘Moya/RxSwift‘ end


import Moyalet DouBanProvider = MoyaProvider< DouBanAPI> ()public enum DouBanAPI { case channels//获取频道列表 case playlist(String) //获取歌曲 }extension DouBanAPI: TargetType { public var baseURL: URL { switch self { case .channels: return URL(string: "https://www.douban.com")! case .playlist(_): return URL(string: "https://douban.fm")! } }public var path: String { switch self { case .channels: return "/j/app/radio/channels" case .playlist(_): return "/j/mine/playlist" } }public var method: Moya.Method { return .get }public var task: Task { switch self { case .playlist(let channel): var params: [String: Any] = [:] params["channel"] = channel params["type"] = "n" params["from"] = "mainsite" return .requestParameters(parameters: params, encoding: URLEncoding.default) default: return .requestPlain } }public var validate: Bool { return false }public var sampleData: Data { return "{}".data(using: String.Encoding.utf8)! }public var headers: [String: String]? { return nil } }

 
import UIKit import ObjectMapper//豆瓣接口模型 struct Douban: Mappable { //频道列表 var channels: [Channel]?init?(map: Map) { }// Mappable mutating func mapping(map: Map) { channels < - map["channels"] } }//频道模型 struct Channel: Mappable { var name: String? var nameEn:String? var channelId: String? var seqId: Int? var abbrEn: String?init?(map: Map) { }// Mappable mutating func mapping(map: Map) { name < - map["name"] nameEn < - map["name_en"] channelId < - map["channel_id"] seqId < - map["seq_id"] abbrEn < - map["abbr_en"] } }//歌曲列表模型 struct Playlist: Mappable { var r: Int! var isShowQuickStart: Int! var song:[Song]!init?(map: Map) { }// Mappable mutating func mapping(map: Map) { r < - map["r"] isShowQuickStart < - map["is_show_quick_start"] song < - map["song"] } }//歌曲模型 struct Song: Mappable { var title: String! var artist: String!init?(map: Map) { }// Mappable mutating func mapping(map: Map) { title < - map["title"] artist < - map["artist"] } }


DouBanProvider.rx.request(.channels) .mapObject(Douban.self) .subscribe(onSuccess: { douban in if let channels = douban.channels { print("--- 共(channels.count)个频道 ---") for channel in channels { if let name = channel.name, let channelId = channel.channelId { print("(name) (id:(channelId))") } } } }, onError: { error in print("数据请求失败!错误原因:", error) }) .disposed(by: disposeBag)



【RxSwift + Moya + ObjectMapper】 

    推荐阅读