// // NetworkRequest.swift // GeLiLaiGeWan // // Created by geli on 2018/6/25. // Copyright © 2018年 geli. All rights reserved. // import Foundation import Alamofire import SwiftyJSON import ObjectMapper import UIKit private let NetworkRequestShareInstance = NetworkRequest() class introModel: Mappable { var code:Int? var message : String? var data : String? required init?( map: Map) { } func mapping(map: Map) { code <- map["code"] message <- map["message"] data <- map["data"] } } class introModel1: Mappable { var code:Int? var message : String? var data : urlData? required init?( map: Map) { } func mapping(map: Map) { code <- map["code"] message <- map["message"] data <- map["data"] } } class urlData: Mappable { var art_id:Int? var content : String? required init?( map: Map) { } func mapping(map: Map) { art_id <- map["art_id"] content <- map["content"] } } class BaseModel: Mappable { var code:Int? var message : String? var data : Any? required init?( map: Map) { } func mapping(map: Map) { code <- map["code"] message <- map["message"] data <- map["data"] } } class NetworkRequest { class var sharedInstance : NetworkRequest { return NetworkRequestShareInstance } } //处理更细分的错误情况,错误类型须遵从Error协议 enum DogError : Error{ case DataInvalidError } extension NetworkRequest { //MARK: - GET 请求 // let tools : NetworkRequest.shareInstance! //MARK: - POST 请求 func postRequest(_ url:String,_ params:[String:Any],_ type:(_ t:DataResponse)->(),success:@escaping (_ res:Any)->(),failture:@escaping(_ error:Error)->()){ let paths = Bundle.main.path(forResource: "Interface_Z", ofType: "plist") let dic = NSDictionary (contentsOfFile: (paths! as String)) let dicstr:String = dic?[url] as! String let allUrl = SERVERCE_HOST + dicstr print(allUrl) print(params) var request = URLRequest(url: URL(string: allUrl)!) request.httpMethod = "POST" request.setValue("application/json", forHTTPHeaderField: "Content-Type") request.addValue("IOS",forHTTPHeaderField:"CLIENT_TYPE") let infoD = Bundle.main.infoDictionary let ver = infoD!["CFBundleShortVersionString"] request.addValue("\(ver!)",forHTTPHeaderField:"CLIENT_VERSION") request.timeoutInterval = 15 request.httpBody = try! JSONSerialization.data(withJSONObject: params, options: []) Alamofire.request(request).responseJSON { (response) in switch response.result { case .success(let value): let json = JSON(value) print(json) if json["code"].intValue == 1 { success(Mapper().map(JSONObject: value)) }else if json["code"].intValue == 2 { //正常-数据为空 success(Mapper().map(JSONObject: value)) }else if json["code"].intValue == 3 { //业务逻辑运行异常,一般作用于验证失败、参数异常(缺失)等异常情况返回 HUD.flash(.label(json["message"].stringValue), delay: 1.5) failture(DogError.DataInvalidError) }else if json["code"].intValue == 10 { HUD.flash(.label(json["message"].stringValue), delay: 1.5) failture(DogError.DataInvalidError) delay(1.5) { UserDefaults.standard.removeObject(forKey: "user_token") NotificationCenter.default.post(name: Notification.Name(rawValue: "logout"), object: nil) } }else if json["code"].intValue == 11 { HUD.flash(.label(json["message"].stringValue), delay: 1.5) failture(DogError.DataInvalidError) }else{ HUD.flash(.label(json["message"].stringValue), delay: 1.5) failture(DogError.DataInvalidError) } case .failure(let error): HUD.flash(.label("网络连接失败"), delay: 2.0) failture(error) print("error:\(error)") } } } //MARK: - 照片上传 func uploadImage(url:String,image: UIImage, params: [String : String], success:@escaping (_ result: [String: Any])->(), failure:@escaping (_ error: Error)->()) { let paths = Bundle.main.path(forResource: "Interface_Z", ofType: "plist") let dic = NSDictionary (contentsOfFile: (paths! as String)) let dicstr:String = dic?[url] as! String Alamofire.upload(multipartFormData: { (multipartFormData) in let data = image.jpegData(compressionQuality: 0.8) let fileName = String.init(describing: NSDate()) + ".png" // withName:是根据文档决定传入的字符串 multipartFormData.append(data!, withName: "image", fileName: fileName, mimeType: "image/png") // 遍历添加参数 for (key, value) in params{ // string 转 data multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key) } }, to: SERVERCE_HOST+dicstr, encodingCompletion: { (encodingResult) in switch encodingResult { case .success(let upload, _, _): upload.responseJSON { response in success(response.result.value as! [String: Any])// 已经转为字典 } case .failure(let encodingError): failure(encodingError) } }) } func postRequestNoMessage(_ url:String,_ params:[String:Any],_ type:(_ t:DataResponse)->(),success:@escaping (_ res:Any)->(),failture:@escaping(_ error:Error)->()){ let paths = Bundle.main.path(forResource: "Interface_Z", ofType: "plist") let dic = NSDictionary (contentsOfFile: (paths! as String)) let dicstr:String = dic?[url] as! String let allUrl = SERVERCE_HOST + dicstr print(allUrl) print(params) var request = URLRequest(url: URL(string: allUrl)!) request.httpMethod = "POST" request.setValue("application/json", forHTTPHeaderField: "Content-Type") request.timeoutInterval = 15 request.httpBody = try! JSONSerialization.data(withJSONObject: params, options: []) Alamofire.request(request).responseJSON { (response) in switch response.result { case .success(let value): let json = JSON(value) print(json) UserDefaults.standard.setValue(json["message"].stringValue, forKey: "jsonMessage") if json["code"].intValue == 1 { success(Mapper().map(JSONObject: value)) }else if json["code"].intValue == 2 { //正常-数据为空 success(Mapper().map(JSONObject: value)) }else if json["code"].intValue == 3 { //业务逻辑运行异常,一般作用于验证失败、参数异常(缺失)等异常情况返回 failture(DogError.DataInvalidError) }else if json["code"].intValue == 10 { failture(DogError.DataInvalidError) NotificationCenter.default.post(name: Notification.Name(rawValue: "logout"), object: nil) }else if json["code"].intValue == 11 { failture(DogError.DataInvalidError) }else{ failture(DogError.DataInvalidError) } case .failure(let error): failture(error) } } } }