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,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
})
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!)
let responseDict = responSEObject as NSDictionary!
},failure: { (operation: AFHTTPRequestOperation!in
Handle Error
})
}
实例
最后,我写了一个简单的例子来通过调用金山词霸的API获取单词swift
的解释。项目使用SwiftHTTP
来作网络请求,使用SwiftyJSON
来解析JSON数据,代码托管在Github,核心代码如下:
请求金山词霸API获取单词`swift`的解释
HTTPTask()
var params: Dictionary<String,AnyObject> = ["w": "swift","key": "30CBA9DDD34B16DB669A9B214C941F14","type": "json"]
request.GET("http://dict-co.iciba.com/api/dictionary.php",0)">
let json = JSONValue(response!)
println("(json)")
},0)">
println("(error)")
})
from:http://swiftist.org/topics/135