• 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"]
        }
    }
    
  • 相关阅读:
    软件工程第四次作业
    软件工程第三次作业
    软件工程第二次作业
    软件工程第一次作业
    [Java数据结构与算法]简单排序之插入排序
    软件工程第四次作业
    软件工程第三次作业
    软件工程第二次作业
    字符串转化为 List 集合
    IO流读写文件中文乱码的解决
  • 原文地址:https://www.cnblogs.com/fshmjl/p/7544291.html
Copyright © 2020-2023  润新知