Swift - 异步获取网络数据封装类

前端之家收集整理的这篇文章主要介绍了Swift - 异步获取网络数据封装类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用NSURLConnection.sendAsynchronousRequest()可以采用异步获取的方式取得数据。下面通过对数据获取类进行封装,演示如何进行数据请求与接收。

1,HttpController.swift (数据获取封装类,结果处理协议)
@H_403_15@ 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
import UIKit
//自定义http协议
protocol HttpProtocol {
//定义一个方法接收一个字典
func didRecieveResults(resultes: NSDictionary )
}
class HttpController : NSObject {
//定义一个可选代理
var delegate: ?
//定义一个方法运过来获取网络数据,接收参数为网址
onSearch(url: String ){
//定义一个NSURL
let nsUrl: NSURL = (string: url)!
//定义一个NSURLRequest
request: NSURLRequest ( URL : nsUrl)
//异步获取数据
NSURLConnection .sendAsynchronousRequest(request,
queue: NSOperationQueue .mainQueue(),
completionHandler: {(response: NSURLResponse ?,data: NSData NSError ?)
-> Void in
//由于我们获取的数据是json格式,所以我们可以将其转化为字典。
jsonResult: =try! NSJSONSerialization . JSONObjectWithData (
data!,
options: NSJSONReadingOptions MutableContainers ) as ! NSDictionary
//将数据传回给代理
self .delegate?.didRecieveResults(jsonResult)
})
}
}

2,ViewController.swift (使用样例)
31
ViewController UIViewController , {
//获取网络数据的类
eHttp: ()
//接收频道列表的数组
channelData: NSArray ()
override viewDidLoad() {
super .viewDidLoad()
//为HttpController实例设置代理
eHttp.delegate= self
//获取频道数据
}
//实现HttpProtocol协议的方法
didRecieveResults(results: ){
if (results[ "channels" ] != nil ){
//如果channels关键字的value不为nil,获取的就是频道数据
.channelData=results[ ] NSArray
@H_746_403@print ( .channelData[0][ "name" ! ) //私人兆赫
}
}
didReceiveMemoryWarning() {
.didReceiveMemoryWarning()
}
}

3,请求数据样例
25
{
"channels" : [
"name_en" : "Personal Radio" "seq_id" : 0,
"abbr_en" "My" "name" "私人兆赫" "channel_id" : 0
},
{
"华语" "" "1" 502_520@""
{
"欧美" : 1,
"2" ""
}
]
}
原文链接:https://www.f2er.com/swift/324534.html

猜你在找的Swift相关文章