iOS项目中网络层实现自动转为对象的网络请求工具封装
2016-02-25 11:04
771 查看
以下是我项目中对网络层的工具类封装可以实现以下等功能
1\ 发送网络请求和进行回调处理
2\自动解析JSON对象 为 对象或对象数组
3\控制台彩色打印输出
4\统计请求次数和请求时间
前提:需以下第三方的支持:
import Alamofire
import SwiftyJSON
import Loggerithm
Reflect (用于字典转对象的OC第三方,需要的可以在github上搜索)
1\ 发送网络请求和进行回调处理
2\自动解析JSON对象 为 对象或对象数组
3\控制台彩色打印输出
4\统计请求次数和请求时间
前提:需以下第三方的支持:
import Alamofire
import SwiftyJSON
import Loggerithm
Reflect (用于字典转对象的OC第三方,需要的可以在github上搜索)
import Alamofire import SwiftyJSON import Loggerithm class HULog_Pro :NSObject{ var urled = DomainName var bianhao = "" var netMethod = NetMethod.GET var parm = [String : AnyObject]() let fasongTime = NSDate() func basicRequstLog_Begin(netMethod:NetMethod?,url: URLStringConvertible,parm:[String : AnyObject]?)->HULog_Pro{ //1 生成标号 和 请求方法统计 UIApplication.sharedApplication().networkActivityIndicatorVisible = true if let netMethods = netMethod{ switch netMethods{ case .GET: bianhao = "GET_\(NetMethod.count_all++)_\(NetMethod.count_get++)" case .POST: bianhao = "POST_\(NetMethod.count_all++)_\(NetMethod.count_post++)" case .PUT: bianhao = "PUT_\(NetMethod.count_all++)_\(NetMethod.count_put++)" case .PATCH: bianhao = "PATCH_\(NetMethod.count_all++)_\(NetMethod.count_patch++)" case .DELETE: bianhao = "DELETE_\(NetMethod.count_all++)_\(NetMethod.count_DELETE++)" break } self.netMethod = netMethods } //2 url处理 urled = url.URLString.toJPURL() if parm == nil{ }else{ self.parm = parm! } if GlobalGuiderModle.guider_id != 0 && GlobalGuiderModle.brand_id != 0 && netMethod != .DELETE && urled.contain(DomainName) && appDelegate.DidjumptoMainTabBar{ if !self.parm.keys.contains("guider_id") && !self.parm.keys.contains("brand_id"){ self.parm["guider_id"] = GlobalGuiderModle.guider_id self.parm["brand_id"] = GlobalGuiderModle.brand_id } } //3 打印 HULOG.info("===========================================================================") HULOG.info("\t��编号 :��\(bianhao)��的请求\t\t\t\t\t\t\t\t\t\t\t��\t\(bianhao)\t\t\(url)") HULOG.info("\t��URL :" + "\(urled)") if let parm = parm{ if let netMethods = netMethod{ switch netMethods{ case .GET: HULOG.info("\t��GET:" + "\(parm)\n") break case .POST: HULOG.info("\t��POST:" + "\(parm)\n") break case .PUT: HULOG.error("\t��PUT:" + "\(parm)\n") break case .PATCH: HULOG.error("\t��PATCH:" + "\(parm)\n") break case .DELETE: HULOG.error("\t��DELETE:" + "\(parm)\n") break } } } HULOG.info("\t") HULOG.info("===========================================================================\n") // TestLog("请求:\(urled)",color:UIColor.lightGrayColor()) return self } func basicRequstLog_End(code:Int)->HULog_Pro{ UIApplication.sharedApplication().networkActivityIndicatorVisible = false let time = -fasongTime.timeIntervalSinceNow //3 打印 HULOG.info("===========================================================================") HULOG.info("\t⛳️编号 :⛳️\(bianhao)⛳️的请求\t\t\t\t\t\t\t\t\t\t\t⛳️\t\(bianhao)\t\t\(code)") HULOG.info("\t⛳️URL :" + "\(urled)") // HULOG.info("\t⛳️PARM:" + "\(parm)\n") switch self.netMethod{ case .GET: HULOG.info("\t⛳️方法:" + "GET\n") HULOG.info("\t⛳️PARM:" + "\(parm)\n") break case .POST: HULOG.info("\t⛳️方法:" + "POST\n") HULOG.info("\t⛳️PARM:" + "\(parm)\n") break case .PUT: HULOG.info("\t⛳️方法:" + "PUT\n") HULOG.error("\t⛳️PARM:" + "\(parm)\n") break case .PATCH: HULOG.info("\t⛳️方法:" + "PATCH\n") HULOG.error("\t⛳️PARM:" + "\(parm)\n") break case .DELETE: HULOG.info("\t⛳️方法:" + "DELETE\n") HULOG.error("\t⛳️PARM:" + "\(parm)\n") break } HULOG.info("\t⛳️用时 :" + "\(time)秒") HULOG.info("\t⛳️状态码 :\(code)") HULOG.info("===========================================================================\n") if code == 403{ NSNotificationCenter.defaultCenter().postNotificationName("dandianDengLu", object: nil) }else if code == 200{ if time > 5 && !self.urled.contain(subStr: "files/upload"){ TestLog("请注意该接口用时有:\(time.toDecimalStylString())s 接口\(urled)",color:UIColor.redColor()) } // TestLog("成功:\(urled)",color:UIColor.darkGrayColor()) }else{ TestLog("!!!\(code)!!!\(urled)",color:UIColor.redColor()) } return self } } class HU :NSObject{ /** PATCH 简单请求 - parameter url: 地址 - parameter parm: 参数 - parameter succese: POST成功 - parameter failure: POST失败 */ class func PATCH_Simple(url: URLStringConvertible,parm:[String : AnyObject]?,showHud:Bool = false, succese: () -> () ,failure:(error:(statusCode:Int,reason:String?))->()) -> (){ let logInfo = HULog_Pro().basicRequstLog_Begin(.PATCH, url: url, parm: parm) let method = Method.PATCH if showHud{HUHud.wait()} Alamofire.request(method, logInfo.urled, parameters: logInfo.parm, encoding:(method == Method.GET ? ParameterEncoding.URL : ParameterEncoding.JSON)).responseJSON { response in if showHud{HUHud.clear()} if let code = response.response?.statusCode{ logInfo.basicRequstLog_End(code) switch code{ case 200: succese() default: if let json = response.result.value { if let error_description = JSON(json)["error_description"].string{ HULOG.error("\(code)" + "\(error_description)") failure(error: (statusCode: code, reason: error_description)) }else{ HULOG.error("\(code)" + "无错误描述") failure(error: (statusCode: code, reason: "无错误描述")) } }else{ HULOG.error("\(code)" + "返回数据为空") failure(error: (statusCode: code, reason: "返回数据为空")) } } }else{ HULOG.error("json为空") failure(error: (statusCode: 999, reason: "响应异常 请求:\(logInfo.urled) 参数:\(parm)")) } } } /** POST 简单请求 返回String - parameter url: 地址 - parameter parm: 参数 - parameter succese: POST成功 - parameter failure: POST失败 */ class func POST_Simple_str(url: URLStringConvertible,parm:[String : AnyObject]?,showHud:Bool = false, succese: () -> () ,failure:(error:(statusCode:Int,reason:String?))->()) -> (){ let logInfo = HULog_Pro().basicRequstLog_Begin(.POST, url: url, parm: parm) let method = Method.POST if showHud{HUHud.wait()} Alamofire.request(method, logInfo.urled, parameters: logInfo.parm, encoding:(method == Method.GET ? ParameterEncoding.URL : ParameterEncoding.JSON)).responseString(completionHandler: { (response) -> Void in if showHud{HUHud.clear()} if let code = response.response?.statusCode{ logInfo.basicRequstLog_End(code) switch code{ case 200: succese() default: if let json = response.result.value { failure(error: (statusCode: code, reason: json)) }else{ HULOG.error("\(code)" + "返回数据为空") failure(error: (statusCode: code, reason: "返回数据为空")) } } }else{ HULOG.error("json为空") failure(error: (statusCode: 999, reason: "响应异常 请求:\(logInfo.urled) 参数:\(parm)")) } }) } /** POST 简单请求 - parameter url: 地址 - parameter parm: 参数 - parameter succese: POST成功 - parameter failure: POST失败 */ class func POST_Simple(url: URLStringConvertible,parm:[String : AnyObject]?,showHud:Bool = false, succese: () -> () ,failure:(error:(statusCode:Int,reason:String?))->()) -> (){ let logInfo = HULog_Pro().basicRequstLog_Begin(.POST, url: url, parm: parm) let method = Method.POST if showHud{HUHud.wait()} Alamofire.request(method, logInfo.urled, parameters: logInfo.parm, encoding:(method == Method.GET ? ParameterEncoding.URL : ParameterEncoding.JSON)).responseJSON { response in if showHud{HUHud.clear()} if let code = response.response?.statusCode{ logInfo.basicRequstLog_End(code) switch code{ case 200: succese() default: if let json = response.result.value { if let error_description = JSON(json)["error_description"].string{ HULOG.error("\(code)" + "\(error_description)") failure(error: (statusCode: code, reason: error_description)) }else{ HULOG.error("\(code)" + "无错误描述") failure(error: (statusCode: code, reason: "无错误描述")) } }else{ HULOG.error("\(code)" + "返回数据为空") failure(error: (statusCode: code, reason: "返回数据为空")) } } }else{ HULOG.error("json为空") failure(error: (statusCode: 999, reason: "响应异常 请求:\(logInfo.urled) 参数:\(parm)")) } } } /** POST 简单请求 - parameter url: 地址 - parameter parm: 参数 - parameter succese: POST成功 - parameter failure: POST失败 */ class func POST_Simple_Dic(url: URLStringConvertible,parm:[String : AnyObject]?,showHud:Bool = false, succese: (dic:JSON) -> () ,failure:(error:(statusCode:Int,reason:String?))->()) -> (){ let logInfo = HULog_Pro().basicRequstLog_Begin(.POST, url: url, parm: parm) let method = Method.POST if showHud{HUHud.wait()} Alamofire.request(method, logInfo.urled, parameters: logInfo.parm, encoding:(method == Method.GET ? ParameterEncoding.URL : ParameterEncoding.JSON)).responseJSON { response in if showHud{HUHud.clear()} if let code = response.response?.statusCode{ logInfo.basicRequstLog_End(code) switch code{ case 200: if let json = response.result.value { if IS_Not_Official_Domain_Name{ print(json) } succese(dic:JSON(json)) }else{ succese(dic:JSON.null) } default: if let json = response.result.value { if let error_description = JSON(json)["error_description"].string{ HULOG.error("\(code)" + "\(error_description)") failure(error: (statusCode: code, reason: error_description)) }else{ HULOG.error("\(code)" + "无错误描述") failure(error: (statusCode: code, reason: "无错误描述")) } }else{ HULOG.error("\(code)" + "返回数据为空") failure(error: (statusCode: code, reason: "返回数据为空")) } } }else{ HULOG.error("json为空") failure(error: (statusCode: 999, reason: "响应异常 请求:\(logInfo.urled) 参数:\(parm)")) } } } /** 简单PUT请求 - parameter url: 地址 - parameter parm: 参数 - parameter succese: 成功 - parameter failure: 失败 */ class func DELETE_Simple(url: URLStringConvertible,parm:[String : AnyObject]?,showHud:Bool = false, succese: () -> () ,failure:(error:(statusCode:Int,reason:String?))->()) -> (){ let logInfo = HULog_Pro().basicRequstLog_Begin(.DELETE, url: url, parm: parm) let method = Method.DELETE if showHud{HUHud.wait()} Alamofire.request(method, logInfo.urled, parameters: logInfo.parm, encoding:(method == Method.GET ? ParameterEncoding.URL : ParameterEncoding.JSON)).responseJSON { response in if showHud{HUHud.clear()} if let code = response.response?.statusCode{ logInfo.basicRequstLog_End(code) switch code{ case 200: succese() default: if let json = response.result.value { if let error_description = JSON(json)["error_description"].string{ HULOG.error("\(code)" + "\(error_description)") failure(error: (statusCode: code, reason: error_description)) }else{ HULOG.error("\(code)" + "无错误描述") failure(error: (statusCode: code, reason: "无错误描述")) } }else{ HULOG.error("\(code)" + "返回数据为空") failure(error: (statusCode: code, reason: "返回数据为空")) } } }else{ HULOG.error("json为空") failure(error: (statusCode: 999, reason: "响应异常 请求:\(logInfo.urled) 参数:\(parm)")) } } } /** 简单PUT请求 - parameter url: 地址 - parameter parm: 参数 - parameter succese: 成功 - parameter failure: 失败 */ class func PUT_Simple(url: URLStringConvertible,parm:[String : AnyObject]?,showHud:Bool = false, succese: () -> () ,failure:(error:(statusCode:Int,reason:String?))->()) -> (){ let logInfo = HULog_Pro().basicRequstLog_Begin(.PUT, url: url, parm: parm) let method = Method.PUT if showHud{HUHud.wait()} Alamofire.request(method, logInfo.urled, parameters: logInfo.parm, encoding:(method == Method.GET ? ParameterEncoding.URL : ParameterEncoding.JSON)).responseJSON { response in if showHud{HUHud.clear()} if let code = response.response?.statusCode{ logInfo.basicRequstLog_End(code) switch code{ case 200: succese() default: if let json = response.result.value { if let error_description = JSON(json)["error_description"].string{ HULOG.error("\(code)" + "\(error_description)") failure(error: (statusCode: code, reason: error_description)) }else{ HULOG.error("\(code)" + "无错误描述") failure(error: (statusCode: code, reason: "无错误描述")) } }else{ HULOG.error("\(code)" + "返回数据为空") failure(error: (statusCode: code, reason: "返回数据为空")) } } }else{ HULOG.error("json为空") failure(error: (statusCode: 999, reason: "响应异常 请求:\(logInfo.urled) 参数:\(parm)")) } } } /** 简单GET请求 _json - parameter url: 地址 - parameter parm: 参数 - parameter succese: 成功 - parameter failure: 失败 */ class func GET_Simple_Json(url: URLStringConvertible,parm:[String : AnyObject]?,showHud:Bool = false, succese: (json:AnyObject) -> () ,failure:(error:(statusCode:Int,reason:String?))->()) -> (){ let logInfo = HULog_Pro().basicRequstLog_Begin(.GET, url: url, parm: parm) let method = Method.GET if showHud{HUHud.wait()} Alamofire.request(method, logInfo.urled, parameters: logInfo.parm, encoding:(method == Method.GET ? ParameterEncoding.URL : ParameterEncoding.JSON)).responseJSON { response in if showHud{HUHud.clear()} if let code = response.response?.statusCode{ logInfo.basicRequstLog_End(code) switch code{ case 200...204: if let json = response.result.value { if IS_Not_Official_Domain_Name{ print("编号:" + logInfo.bianhao + " 获得的数据:\n") print(json) } succese(json:json) }else{ failure(error: (statusCode: code, reason: "无数据")) } default: if let json = response.result.value { if let error_description = JSON(json)["error_description"].string{ HULOG.error("\(code)" + "\(error_description)") failure(error: (statusCode: code, reason: error_description)) }else{ HULOG.error("\(code)" + "无错误描述") failure(error: (statusCode: code, reason: "无错误描述")) } }else{ HULOG.error("\(code)" + "返回数据为空") failure(error: (statusCode: code, reason: "返回数据为空")) } } }else{ HULOG.error("json为空") failure(error: (statusCode: 999, reason: "响应异常 请求:\(logInfo.urled) 参数:\(parm)")) } } } /** 简单GET请求 _JSONdic - parameter url: 地址 - parameter parm: 参数 - parameter succese: 成功 - parameter failure: 失败 */ class func GET_Simple_JSON(url: URLStringConvertible,parm:[String : AnyObject]?,showHud:Bool = false, parmNil:Bool = false, succese: (JSON:JSON) -> () ,failure:(error:(statusCode:Int,reason:String?))->()) -> (){ let logInfo = HULog_Pro().basicRequstLog_Begin(.GET, url: url, parm: parm) let method = Method.GET if parmNil { print("\(logInfo.bianhao) parm 置为nil ")} if showHud{HUHud.wait()} Alamofire.request(method, logInfo.urled, parameters: parmNil ? nil : logInfo.parm, encoding:(method == Method.GET ? ParameterEncoding.URL : ParameterEncoding.JSON)).responseJSON { response in if showHud{HUHud.clear()} if let code = response.response?.statusCode{ logInfo.basicRequstLog_End(code) switch code{ case 200...204: if let json = response.result.value { if IS_Not_Official_Domain_Name{ print(json) } succese(JSON:JSON(json)) }else{ succese(JSON:JSON.null) } default: if let json = response.result.value { if let error_description = JSON(json)["error_description"].string{ HULOG.error("\(code)" + "\(error_description)") failure(error: (statusCode: code, reason: error_description)) }else{ HULOG.error("\(code)" + "无错误描述") failure(error: (statusCode: code, reason: "无错误描述")) } }else{ HULOG.error("\(code)" + "返回数据为空") failure(error: (statusCode: code, reason: "返回数据为空")) } } }else{ HULOG.error("json为空") failure(error: (statusCode: 999, reason: "响应异常 请求:\(logInfo.urled) 参数:\(parm)")) } } } /** 简单GET请求 - parameter url: 地址 - parameter parm: 参数 - parameter succese: 成功 - parameter failure: 失败 */ class func GET_Simple(url: URLStringConvertible,parm:[String : AnyObject]?,showHud:Bool = false, succese: () -> () ,failure:(error:(statusCode:Int,reason:String?))->()) -> (){ let logInfo = HULog_Pro().basicRequstLog_Begin(.GET, url: url, parm: parm) let method = Method.GET if showHud{HUHud.wait()} Alamofire.request(method, logInfo.urled, parameters: logInfo.parm, encoding:(method == Method.GET ? ParameterEncoding.URL : ParameterEncoding.JSON)).responseJSON { response in if showHud{HUHud.clear()} if let code = response.response?.statusCode{ logInfo.basicRequstLog_End(code) switch code{ case 200: succese() default: if let json = response.result.value { if let error_description = JSON(json)["error_description"].string{ HULOG.error("\(code)" + "\(error_description)") failure(error: (statusCode: code, reason: error_description)) }else{ HULOG.error("\(code)" + "无错误描述") failure(error: (statusCode: code, reason: "无错误描述")) } }else{ HULOG.error("\(code)" + "返回数据为空") failure(error: (statusCode: code, reason: "返回数据为空")) } } }else{ HULOG.error("json为空") failure(error: (statusCode: 999, reason: "响应异常 请求:\(logInfo.urled) 参数:\(parm)")) } } } /** GET请求字典 转模型 - parameter netMethod: Get方法请求模型 - parameter url: 路由地址 - parameter parm: 参数 - parameter completionHandler: 请求完成 */ class func GET_Dic<T : Reflect>(url: URLStringConvertible,parm:[String : AnyObject]?,showHud:Bool = false, completionHandler: (T) -> Void ,failure:(error:(statusCode:Int,reason:String?))->()) -> (){ let logInfo = HULog_Pro().basicRequstLog_Begin(.GET, url: url, parm: parm) let method = Method.GET if showHud{HUHud.wait()} Alamofire.request(method, logInfo.urled, parameters: logInfo.parm, encoding:(method == Method.GET ? ParameterEncoding.URL : ParameterEncoding.JSON)).responseJSON { response in if showHud{HUHud.clear()} if let code = response.response?.statusCode{ logInfo.basicRequstLog_End(code) switch code{ case 200: if let json = response.result.value { if IS_Not_Official_Domain_Name{ print(json) } if let jsondic = json as? NSDictionary{ let modles = T.parse(dict: jsondic) completionHandler(modles) }else{ failure(error: (statusCode: code, reason: "\(json)")) } } default: if let json = response.result.value { if let error_description = JSON(json)["error_description"].string{ HULOG.error("\(code)" + "\(error_description)") failure(error: (statusCode: code, reason: error_description)) }else{ HULOG.error("\(code)" + "无错误描述") failure(error: (statusCode: code, reason: "无错误描述")) } }else{ HULOG.error("\(code)" + "返回数据为空") failure(error: (statusCode: code, reason: "返回数据为空")) } } }else{ HULOG.error("json为空") failure(error: (statusCode: 999, reason: "响应异常 请求:\(logInfo.urled) 参数:\(parm)")) } } } /** GET请求数组 转模型数组 - parameter netMethod: Get方法请求模型数组 - parameter url: 路由地址 - parameter parm: 参数 - parameter completionHandler: 请求完成 */ class func GET_Array<T : Reflect>(url: URLStringConvertible,parm:[String : AnyObject]?,showHud:Bool = false, completionHandler: ([T]) -> Void ,failure:(error:(statusCode:Int,reason:String?))->()) -> (){ let logInfo = HULog_Pro().basicRequstLog_Begin(.GET, url: url, parm: parm) let method = Method.GET if showHud{HUHud.wait()} Alamofire.request(method, logInfo.urled, parameters: logInfo.parm, encoding:(method == Method.GET ? ParameterEncoding.URL : ParameterEncoding.JSON)).responseJSON { response in if showHud{HUHud.clear()} if let code = response.response?.statusCode{ logInfo.basicRequstLog_End(code) switch code{ case 200: if let json = response.result.value { if IS_Not_Official_Domain_Name{ print(json) } let modles = T.parses(arr: json as! NSArray) completionHandler(modles as! [T]) } default: if let json = response.result.value { if let error_description = JSON(json)["error_description"].string{ HULOG.error("\(code)" + "\(error_description)") failure(error: (statusCode: code, reason: error_description)) }else{ HULOG.error("\(code)" + "无错误描述") failure(error: (statusCode: code, reason: "无错误描述")) } }else{ HULOG.error("\(code)" + "返回数据为空") failure(error: (statusCode: code, reason: "返回数据为空")) } } }else{ HULOG.error("json为空") failure(error: (statusCode: 999, reason: "响应异常 请求:\(logInfo.urled) 参数:\(parm)")) } } } /** 上传单个图片 - parameter zipTpey: 压缩类型 暂时没区分 - parameter imagedate: 需要上传的图片 - parameter success: 成功回调 - parameter falue: 失败回调 */ class func postUpLoadImages(zipTpey:postUpLoadImagesZipTpey,imagedate:UIImage,success:((imageurl :String)->()),failure:(error:(statusCode:Int,reason:String?))->()) -> (){ let logInfo = HULog_Pro().basicRequstLog_Begin(nil, url: "\(DomainName)/files/upload/images?zip=small", parm: nil) let credential = NSURLCredential(user: GlobalGuiderModle.phoneNumber, password:GlobalGuiderModle.passWord, persistence: .ForSession) self.UploadImageFileToServer("\(DomainName)/files/upload/images?zip=small", uploadImage: imagedate, imageType: ImageType.Png) .authenticate(usingCredential: credential).responseJSON { response in if let code = response.response?.statusCode{ logInfo.basicRequstLog_End(code) switch code{ case 200: if let json = response.result.value { if let srt = JSON(json)["urls"][0].string{ success(imageurl:srt) }else{ failure(error: (statusCode: code, reason: "url解析错误")) } } default: if let json = response.result.value { if let error_description = JSON(json)["error_description"].string{ HULOG.error("\(code)" + "\(error_description)") failure(error: (statusCode: code, reason: error_description)) }else{ HULOG.error("\(code)" + "无错误描述") failure(error: (statusCode: code, reason: "无错误描述")) } }else{ HULOG.error("\(code)" + "返回数据为空") failure(error: (statusCode: code, reason: "返回数据为空")) } } }else{ HULOG.error("json为空") } } } } enum NetMethod: String { case GET = "GET" case POST = "POST" case PUT = "PUT" case PATCH = "PATCH" case DELETE = "DELETE" static var count_get = 0 static var count_post = 0 static var count_put = 0 static var count_patch = 0 static var count_DELETE = 0 static var count_all = 0 }
相关文章推荐
- android wifi 无线调试
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 拨号网络的简单知识
- 菜鸟必看网络名词
- 通晓网络测试常用命令
- 网络路由技术及运用2
- IP网络路由技术
- 网络防火墙的设置技巧
- 网络管理之IP地址篇
- 网络路由技术及运用3
- 网络路由技术及运用4
- 网络路由技术及运用1
- 无线局域网络简介一