https://www.jianshu.com/p/173915b943af
use_frameworks! target ‘RXDemo‘ do pod ‘RxSwift‘ pod ‘RxCocoa‘ pod ‘Moya-ObjectMapper/RxSwift‘ pod ‘Moya/RxSwift‘ end
import Moya let 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)
原文地址:https://www.cnblogs.com/youhui/p/10268251.html
时间: 2024-10-17 01:50:02