使用NSURLConnection.sendAsynchronousRequest()可以采用异步获取的方式取得数据。下面通过对数据获取类进行封装,演示如何进行数据请求与接收。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
import UIKit//自定义http协议protocol HttpProtocol{ //定义一个方法接收一个字典 func didRecieveResults(resultes:NSDictionary)}class HttpController:NSObject{ //定义一个可选代理 var delegate:HttpProtocol? //定义一个方法运过来获取网络数据,接收参数为网址 func onSearch(url:String){ //定义一个NSURL var nsUrl:NSURL=NSURL(string: url)! //定义一个NSURLRequest var request:NSURLRequest=NSURLRequest(URL: nsUrl) //异步获取数据 NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {(response:NSURLResponse!,data:NSData!,error:NSError!)->Void in //由于我们获取的数据是json格式,所以我们可以将其转化为字典。 var jsonResult:NSDictionary=NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary //将数据传回给代理 self.delegate?.didRecieveResults(jsonResult) }) }} |
2,ViewController.swift (使用样例)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
import UIKitclass ViewController: UIViewController,HttpProtocol { //获取网络数据的类 var eHttp:HttpController = HttpController() //接收频道列表的数组 var channelData:NSArray=NSArray() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. //为HttpController实例设置代理 eHttp.delegate=self //获取频道数据 } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //实现HttpProtocol协议的方法 func didRecieveResults(results:NSDictionary){ if (results["channels"] != nil){ //如果channels关键字的value不为nil,获取的就是频道数据 self.channelData=results["channels"] as NSArray println(self.channelData[0]["name"] as String) //私人兆赫 } }} |
3,请求数据样例
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
{ "channels": [ { "name_en": "Personal Radio", "seq_id": 0, "abbr_en": "My", "name": "私人兆赫", "channel_id": 0 }, { "name": "华语", "seq_id": 0, "abbr_en": "", "channel_id": "1", "name_en": "" }, { "name": "欧美", "seq_id": 1, "abbr_en": "", "channel_id": "2", "name_en": "" } ]} |
原文:http://www.cnblogs.com/Free-Thinker/p/4841051.html