开发了这些年,做为一个颇有些经验的开发人员来说,我不是很喜欢用别人写的库。除非比较复杂。简单的库还是喜欢自己完成。可以量身打造,随便改动。今天继续贴出来HTTP封装类库,大家相互学习交流下。
HttpClient.swift
HttpResult.swift
下面是VC中的点击代码。调用。
也很简单,对吧!
HttpClient.swift
import UIKit class HttpClient: NSObject { static let TIME_OUT:NSTimeInterval = 10 private static func initRequest(urlString :String)->NSURLRequest! { let url = NSURL(string: urlString) let request = NSURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringCacheData, timeoutInterval: TIME_OUT) return request } private static func initMutableURLRequest(urlString :String)->NSMutableURLRequest! { let url = NSURL(string: urlString) let request = NSMutableURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringCacheData, timeoutInterval: TIME_OUT) return request } static func httpAsynRequest(urlString :String, completionHandler: (HttpResult!) -> Void){ let request = initRequest(urlString) NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { (response:NSURLResponse?, data:NSData?, error:NSError?) -> Void in if error != nil { completionHandler(HttpResult(error: error!)) }else if response != nil { let httpResponse = response as! NSHTTPURLResponse let httpResult = HttpResult(responseCode: httpResponse.statusCode,data: data!) completionHandler(httpResult) } } } static func httpAsyncPostStringRequest(urlString :String,postData :String, completionHandler: (HttpResult!) -> Void){ httpAsyncPostRequest(urlString, postData: postData.dataUsingEncoding(NSUTF8StringEncoding)!, completionHandler: completionHandler) } static func httpAsyncPostRequest(urlString :String,postData :NSData, completionHandler: (HttpResult!) -> Void){ let request = initMutableURLRequest(urlString) request.HTTPMethod = "POST" request.HTTPBody = postData request.addValue("application/json", forHTTPHeaderField: "Content-Type") let config = NSURLSessionConfiguration.defaultSessionConfiguration()//默认配置 config.timeoutIntervalForRequest = TIME_OUT //连接超时时间 let session = NSURLSession(configuration: config) let task = session.dataTaskWithRequest(request) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in if error != nil { completionHandler(HttpResult(error: error!)) }else if response != nil { let httpResponse = response as! NSHTTPURLResponse let httpResult = HttpResult(responseCode: httpResponse.statusCode,data: data!) completionHandler(httpResult) } } task.resume() } static func httpPostBinRequest(urlString :String,postData :NSData, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void){ let request = initMutableURLRequest(urlString) request.HTTPMethod = "POST" request.HTTPBody = postData let config = NSURLSessionConfiguration.defaultSessionConfiguration()//默认配置 config.timeoutIntervalForRequest = TIME_OUT //连接超时时间 let session = NSURLSession(configuration: config) let task = session.dataTaskWithRequest(request,completionHandler: completionHandler) task.resume() } }
HttpResult.swift
import Foundation class HttpResult: NSObject { private var responseCode:Int! private var responseString:String! private var data:NSData! private var error:NSError! init(error:NSError) { self.responseCode = 0 self.responseString = nil self.data = nil self.error = error } init(responseCode:Int,data:NSData) { self.responseCode = responseCode self.data = data } func getResponseCode()->Int { return self.responseCode } func getResponseString()-> String { if self.responseString == nil { self.responseString = NSString(data:data!, encoding: NSUTF8StringEncoding) as String! } return self.responseString } func getData()->NSData { return self.data } func isSuccess()-> Bool { return self.responseCode == 200 } }
下面是VC中的点击代码。调用。
@IBAction func loginClicked(sender: UIButton) { HttpClient.httpAsynRequest("http://www.it72.com/json.php") { (result) -> Void in if result.isSuccess() { JsonParser.parse(result.getData()) self.presentViewController(self.sideMenuConvtroller, animated: true, completion: nil) }else{ print("登录失败") } } }
也很简单,对吧!
收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2305
- 用户1336
- 访客11380514
每日一句
Great people do things before they are ready.
伟大的人在准备好前就行动。
伟大的人在准备好前就行动。
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is
Android 8.0应用图标适配
解决vue动态生成el-table-column按钮点击事件
VC++实现远程控制
傻瓜式安装黑苹果的方式,超简单,吐血推荐!
Android最简单方式实现DatePickerDialog只显示年、月、日
mysql查询表索引的命令使用小记
Mac OS解决开机黑屏时间长(秒启动)
使用HTML和CSS设计磨砂玻璃效果
简单利用Clover四叶草安装U盘安装黑苹果
font-awesome-to-png快速将Font-Awesome字体保存为PNG图片
2017年10月编程语言排行榜
XPosed插件自动生成支付宝收款二维码
新会员