Moya/RxSwift/ObjectMapper/Alamofire开发
废话不多说直接上代码
- //
- // MoyaNetWorking.swift
- // GreenAir
- //
- // Created by BruceAlbert on 2017/9/18.
- // Copyright © 2017年 Mars. All rights reserved.
- //
- import UIKit
- import Moya
- //import Alamofire
- import RxSwift
- import SwiftyJSON
- import ObjectMapper
- typealias SuccessClosure = (_ result: AnyObject) -> Void
- typealias FailClosure = (_ errorMsg: String?) -> Void
- enum RequestCode: String {
- case failError = "0"
- case success = "1"
- }
- class MoyaNetWorking: NSObject {
- static let sharedInstance = MoyaNetWorking()
- private override init(){}
- let requestProvider = RxMoyaProvider<RequestApi>()
- func getCurrentAddressWeather<T: Mappable>(target:RequestApi, type:T.Type, successClosure:@escaping SuccessClosure, failClosure: @escaping FailClosure) {
- _ = requestProvider.request(target).subscribe{ event -> Void in
- switch event {
- case .next(let response):
- print("\(response.data)")
- let json = JSON.init(data: response.data, options: .allowFragments, error: nil)
- let info = Mapper<WeatherModel>().map(JSONObject: json.dictionaryObject)
- guard let data = info?.result else {
- failClosure("数据为空")
- return
- }
- successClosure(data)
- case .error(let error):
- print("网络请求失败...\(error)")
- default: break
- }
- }
- }
- }
- public enum RequestApi {
- case weather(city:String, province: String)
- }
- extension RequestApi: TargetType {
- /// The parameters to be encoded in the request.
- public var baseURL: URL {
- return NSURL(string: "http://apicloud.mob.com/")! as URL //天气接口BaseUrl
- }
- public var path: String {
- switch self {
- case .weather(_, _):
- return "v1/weather/query"
- }
- }
- public var method: Moya.Method {
- switch self {
- case .weather(_, _):
- return .get
- default :
- return .post
- }
- }
- public var parameters: [String : Any]? {
- switch self {
- case let .weather(city, province):
- return ["key":"202a3152f2222", "city":city, "province":province]
- default:
- return nil
- }
- }
- public var parameterEncoding : ParameterEncoding {
- return URLEncoding.default
- }
- // 单元测试用
- public var sampleData: Data {
- return "{}".data(using: String.Encoding.utf8)!
- }
- public var task: Task {
- return .request
- }
- public var validate: Bool{
- return true
- }
- }
swift 请求成功和失败 block
- typealias SuccessClosure = (_ result: AnyObject) -> Void
- typealias FailClosure = (_ errorMsg: String?) -> Void
请求状态码
- enum RequestCode: String {
- case failError = "0"
- case success = "1"
- }
实例和遵守协议
- static let sharedInstance = MoyaNetWorking()
- let requestProvider = RxMoyaProvider<RequestApi>()
请求数据方法+数据监听(Rxswift)
- func getCurrentAddressWeather<T: Mappable>(target:RequestApi, type:T.Type, successClosure:@escaping SuccessClosure, failClosure: @escaping FailClosure) {
- _ = requestProvider.request(target).subscribe{ event -> Void in //Rxswift的元素监听
- switch event {
- case .next(let response):
- print("\(response.data)")
- let json = JSON.init(data: response.data, options: .allowFragments, error: nil)
- let info = Mapper<WeatherModel>().map(JSONObject: json.dictionaryObject)
- guard let data = info?.result else {
- failClosure("数据为空")
- return
- }
- successClosure(data)
- case .error(let error):
- print("网络请求失败...\(error)")
- default: break
- }
- }
- }
请求api,以枚举方式设置接口,使用swift开发过一段的都知道
- public enum RequestApi {
- case weather(city:String, province: String)
- }
设置api扩展且,遵守TargetType协议,TargetType的所有成员必须实现
- extension RequestApi: TargetType {
- /// The parameters to be encoded in the request.
- public var baseURL: URL {
- return NSURL(string: "http://apicloud.mob.com/")! as URL //天气接口BaseUrl
- }
- public var path: String {
- switch self {
- case .weather(_, _):
- return "v1/weather/query"//按照api的path,
- }
- }
- public var method: Moya.Method {
- switch self {
- case .weather(_, _):
- return .get
- default :
- return .post
- }
- }
- public var parameters: [String : Any]? {
- switch self {
- case let .weather(city, province):
- return ["key":"202a3152f2222", "city":city, "province":province]
- default:
- return nil
- }
- }
- public var parameterEncoding : ParameterEncoding {
- return URLEncoding.default
- }
- // 单元测试用
- public var sampleData: Data {
- return "{}".data(using: String.Encoding.utf8)!
- }
- public var task: Task {
- return .request
- }
- public var validate: Bool{
- return true
- }
- }
WeatherModel类及其相关类
- //
- // WeatherModel.swift
- // GreenAir
- //
- // Created by BruceAlbert on 2017/9/18.
- // Copyright © 2017年 Mars. All rights reserved.
- //
- import UIKit
- import ObjectMapper
- class WeatherModel : Mappable {
- var msg : String?
- var retCode : String?
- var result : AnyObject?
- required init?(map: Map) {
- }
- func mapping(map: Map) {
- msg <- map["msg"]
- retCode <- map["retCode"]
- result <- map["result"]
- }
- }
- class WeatherUintModel : Mappable{
- var airCondition : String?
- var city : String?
- var coldIndex : String?
- var updateTime : String?
- var date : String?
- var distrct : String?
- var dressingIndex : String?
- var exerciseIndex : String?
- var humidity : String?
- var pollutionIndex : String?
- var province : String?
- var sunrise : String?
- var sunset : String?
- var temperature : String?
- var time : String?
- var washIndex : String?
- var weather : String?
- var week : String?
- var wind : String?
- var future : Array<WeatherData>?
- required init?(map: Map) {
- }
- func mapping(map: Map) {
- airCondition <- map["airCondition"]
- city <- map["city"]
- coldIndex <- map["coldIndex"]
- updateTime <- map["updateTime"]
- date <- map["date"]
- distrct <- map["distrct"]
- dressingIndex <- map["dressingIndex"]
- exerciseIndex <- map["exerciseIndex"]
- humidity <- map["humidity"]
- pollutionIndex <- map["pollutionIndex"]
- province <- map["province"]
- sunrise <- map["sunrise"]
- sunset <- map["sunset"]
- temperature <- map["temperature"]
- time <- map["time"]
- washIndex <- map["washIndex"]
- weather <- map["weather"]
- week <- map["week"]
- wind <- map["wind"]
- future <- map["future"]
- }
- }
- class WeatherData : Mappable {
- var date : String?
- var dayTime : String?
- var night : String?
- var temperature : String?
- var week : String?
- var wind : String?
- required init?(map: Map) {
- }
- func mapping(map: Map) {
- date <- map["date"]
- dayTime <- map["dayTime"]
- night <- map["night"]
- temperature <- map["temperature"]
- week <- map["week"]
- wind <- map["wind"]
- }
- }
Moya/RxSwift/ObjectMapper/Alamofire开发的更多相关文章
- Swift高仿iOS网易云音乐Moya+RxSwift+Kingfisher+MVC+MVVM
效果 列文章目录 因为目录比较多,每次更新这里比较麻烦,所以推荐点击到主页,然后查看iOS Swift云音乐专栏. 目简介 这是一个使用Swift(还有OC版本)语言,从0开发一个iOS平台,接近企业 ...
- 基于Moya、RxSwift和ObjectMapper优雅实现REST API请求
在Android开发中有非常强大的 Retrofit 请求,结合RxJava可以非常方便实现 RESTful API 网络请求.在 iOS开发中也有非常强大的网络请求库 Moya ,Moya是一个基于 ...
- RxSwift + Moya + ObjectMapper
https://www.jianshu.com/p/173915b943af use_frameworks! target 'RXDemo' do pod 'RxSwift' pod 'RxCocoa ...
- Moya 与 RxSwift 使用
如在OC中使用AFNetworking一般,Swift我们用Alamofire来做网络库.而Moya在Alamofire的基础上又封装了一层: 1.关于moya moya 官方说moya有以下特性-_ ...
- ReactiveX 学习笔记(17)使用 RxSwift + Alamofire 调用 REST API
JSON : Placeholder JSON : Placeholder (https://jsonplaceholder.typicode.com/) 是一个用于测试的 REST API 网站. ...
- iOS:iOS开发非常全的三方库、插件等等
iOS开发非常全的三方库.插件等等 github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自git ...
- iOS开发之资料收集
github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自github:https://github ...
- iOS开发 非常全的三方库、插件、大牛博客等等
UI 下拉刷新 EGOTableViewPullRefresh- 最早的下拉刷新控件. SVPullToRefresh- 下拉刷新控件. MJRefresh- 仅需一行代码就可以为UITableVie ...
- iOS 第三方库、插件、知名博客总结
iOS 第三方库.插件.知名博客总结 用到的组件 1.通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FMDB 本地数据库组件 SDWebImage 多个缩略图 ...
随机推荐
- java课堂实践(5月17日)20155317 王新玮
对P145 MathTool.java 代码托管 在IDEA中,使用JUnit进行单元测试,测试用例不少于三个,要包含正常情况,边界情况.提交测试代码和运行结果截图,加上学号水印,提交码云代码链接. ...
- 20155336 《Java程序设计》实验二 (Java面向对象程序设计)实验报告
20155336 <Java程序设计>实验二 (Java面向对象程序设计)实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉 ...
- js获取上月的最后一天
一.问题: 在最近的开发中遇到一个需求,需要初始化默认时间为上月的最后一天 而在日历中这个值在每个月都不是固定的 二.分析: 问题可以转化为,获取指定月份时间的月末最后一天,下边是代码,供大家参考 f ...
- codevs 5429 多重背包
5429 多重背包 http://codevs.cn/problem/5429 分析: f[i]=g[j-k*siz[i]]+k*val[i]; 发现一个状态d只会更新,d+siz[i],d+2*si ...
- 自己用C语言写RL78 serial bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 之前用C实现过多款PI ...
- 探寻ASP.NET MVC鲜为人知的奥秘(1):对LESS的支持
在ASP.NET MVC3中(从那时开始),我们拥有了对js和css等文件的捆绑(Bundling)和压缩(Minification)的能力,这是ASP.NET性能优化工作的一部分. 想一下很久以前, ...
- C# VS,连接到oracle 报要升级到8.多少版本的错
1:确定服务器的oracle版本 2:本地的客户端版本要和服务器一致 3:操作系统位数要一致
- javaweb(八)——HttpServletResponse对象(二)
一.HttpServletResponse常见应用——生成验证码 1.1.生成随机图片用作验证码 生成图片主要用到了一个BufferedImage类, 生成随机图片范例: 1 package gacl ...
- com.genuitec.runtime.generic.jee60 is not defined 导入项目的异常
系统加载工程后,报错Target runtime com.genuitec.runtime.generic.jee60 is not defined,在发布工程的同事电脑上正常 新导入的工程,出问题很 ...
- ESP8266 NON-OS SDK 和 RTOS SDK实现GPIO中断不同点
ESP8266 Non-OS SDK 和 RTOS SDK 实现GPIO的方法稍有不同: 对于 Non-OS SDK,比如需要把 MTDO 配置成输入,同时下降沿触发中断: gpio_init(voi ...