iOS开发中大部分App的网络数据交换是基于HTTP协议的。本文将简单介绍在Swift中使用HTTP进行网络请求的几种方法。
2016-07-21 10:20
1896 查看
iOS开发中大部分App的网络数据交换是基于HTTP
协议的。本文将简单介绍在Swift中使用HTTP进行网络请求的几种方法。
注意:网络请求完成后会获得一个NSData类型的返回数据,如果数据格式为JSON,那么可以使用系统自带的NSJSONSerialization类来解析数据;或者使用SwiftyJSON库的使用和思考一文中提到的JSON解析库来解析数据。
1. 使用NSURLConnection
下面例子使用NSURLConnection实现了一个简单的异步GET操作:
func requestUrl(urlString: String){ var url: NSURL = NSURL(string: urlString) let request: NSURLRequest = NSURLRequest(URL: url) NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler:{ (response, data, error) -> Void in if error? { //Handle Error here }else{ //Handle data in NSData type } }) }
2. 使用YYHRequest-Swift库
这个库通过封装NSURLConnection和
NSOperationQueue实现了简单的HTTP GET/POST/PUT/DELETE操作:
let request = YYHRequest(url: NSURL(string: "http://www.google.com/")) request.loadWithCompletion { response, data, error in // request complete! }
3. 使用SwiftHTTP库。
这个库通过封装NSURLSession,提供了GET/POST/PUT/DELETE以及上传和下载的支持,比较全面:
var request = HTTPTask() request.GET("http://vluxe.io", parameters: nil, success: {(response: AnyObject?) -> Void in },failure: {(error: NSError) -> Void in })
4. 使用Objective-C中的AFNetworking网络库
AFNetworking库是在iOS开发领域享有盛名、功能强大的网络请求库。
首先将AFNetworking库引入工程,请参考这篇教程
然后在
<ProjectName>-Bridging-Header.h头文件中引入AFNetworking:
#import “AFNetworking/AFNetworking.h”
下面简单展示了
AFNetworking中
GET的用法:
func requestUrl(urlString: String) { let manager = AFHTTPRequestOperationManager() let params = ["a":1, "b":2] manager.GET(urlString, parameters: params, success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) in let responseDict = responseObject as NSDictionary! }, failure: { (operation: AFHTTPRequestOperation!, error: NSError!) in //Handle Error }) }
实例
最后,我写了一个简单的例子来通过调用金山词霸的API获取单词swift的解释。项目使用
SwiftHTTP来作网络请求,使用
SwiftyJSON来解析JSON数据,代码托管在Github,核心代码如下:
//请求金山词霸API获取单词`swift`的解释 var request = HTTPTask() var params: Dictionary<String, AnyObject> = ["w": "swift", "key": "30CBA9DDD34B16DB669A9B214C941F14", "type": "json"] request.GET("http://dict-co.iciba.com/api/dictionary.php", parameters: params, success: {(response: AnyObject?) -> Void in let json = JSONValue(response!) println("\(json)") },failure: {(error: NSError) -> Void in println("\(error)") })
相关文章推荐
- 【iOS开发】AFN报错Code=-1007 "too many HTTP redirects"
- 每个程序员和设计师必做的10项运动(http://begeek.cn/post/8271.html?_biz=MjM5OTA1MDUyMA==&mid=407358558&idx=2&sn=b218)
- 网络学习笔记之IP数据报的分片与组装
- TCP详解
- 强烈推荐:程序员接私活那点事(http://www.jianshu.com/p/cfab9e80b7c4)
- neural-networks-and-deep-learning network3.py
- HttpURLConnection与 HttpClient 区别
- 数据包是如何在网络中传输的
- java多线程下载网络图片
- 程序员常用的技术网站(http://bbs.jointforce.com/topic/17717)
- Android 开发之判断当前是否有网络可用
- asp.net 使用HttpModule记录全局错误
- 社会计算
- HTTP深入浅出 http请求
- Android Http请求图片上传工具类
- 纯java http协议通讯
- 在三台主机上分别安装httpd、php-fpm、MariaDB
- Android解决"关于Xutils框架出现无法访问HttpRequestBase 找不到org.apache.http.client.methods.HttpRequestBase解决方案
- 图片加载的优化 --- 实现图片的缓存、本地内存及网络的三重筛选之后的加载
- 浅谈我为什么选择用Retrofit作为我的网络请求框架