Swift - 异步获取网络数据封装类
使用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 UIKit class 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" : "" } ] } |
Swift - 异步获取网络数据封装类的更多相关文章
- Swift实战-豆瓣电台(三)获取网络数据
观看地址:http://v.youku.com/v_show/id_XNzMwMzQxMzky.html 这节内容,我们先说了怎么将storyboard中的组件在类中进行绑定.然后写了一个类用来获取网 ...
- android—获取网络数据
取网络数据主要靠发交易(或者说请求,接口等),而这些交易由java中的网络通信,HttpURLConnection和HttpClient实现,以下是具体例子. 大家都知道,网络通信,发送请求有两种 ...
- 使用NSURLSession获取网络数据和下载文件
使用NSURLSession获取网络数据 使用NSURLSession下载文件
- Http方式获取网络数据
通过以下代码可以根据网址获取网页的html数据,安卓中获取网络数据的时候会用到,而且会用Java中的sax方式解析获取到数据.(sax解析主要是解析xml)具体代码如下: package com.wy ...
- Android中获取网络数据时的分页加载
//此实在Fragment中实现的,黄色部分为自动加载,红色部分是需要注意的和手动加载, 蓝色部分是睡眠时间,自我感觉不用写 ,还有就是手动加载时,不知道为什么进去后显示的就是最后一行,求大神 ...
- [置顶] 获取网络数据中的数组显示成ListView的简单流程
首先说一下 这是我自己的个人笔记,如果想看看,不用看细节,可以看流程. 定义一个线程池 ExecutorService pool = Executors.newFixedThreadPool(15) ...
- easyui panel异步获取后台数据在前台显示
我在使用easyui的时候,想做一个向下图所示的效果,这个panel的样式已经做好了,想从后台异步获取json数据,然后填入到文本框中,不知道哪位大神能给点指导?万分感谢! 放入表单中,使用form对 ...
- jQuery异步获取json数据的2种方式
jQuery异步获取json数据有2种方式,一个是$.getJSON方法,一个是$.ajax方法.本篇体验使用这2种方式异步获取json数据,然后追加到页面. 在根目录下创建data.json文件: ...
- 使用promise方式来获取网络数据
获取网络数据 let data = []; new Promise(function(resolve,reject){ axios.post('api.php').then(function(resp ...
随机推荐
- 基于visual Studio2013解决算法导论之018栈实现(基于链表)
题目 用链表实现栈 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> #in ...
- 为Cocos2d-x的Android平台加入Protobuffer支持
为Cocos2d-x的Android平台加入Protobuffer支持 分类: 工作2013-11-27 18:00 386人阅读 评论(1) 收藏 举报 cocos2d-xandroid平台交叉编译 ...
- python2.7 串口操作方式 编译 .py为windows可运行exe文件
一 python操作串口 首先下载安装串口模块pyserial . 代码实现: import serial ser = serial.Serial('/dev/ttyUSB2', 115200) pr ...
- Android调整TimePicker和DatePicker大小
最近写了个app,里面要将DatePicker和TimePicker并列显示.但是,Android内部把DatePicker和 TimePicker大小固定了,导致4.5寸手机屏幕一行只能显示出一个, ...
- C#中对文件的操作
详细介绍参考:http://blog.csdn.net/wangyue4/article/details/4616801 源码举例: public class FileSystemManager { ...
- Java基础10 接口的继承与抽象类
链接地址:http://www.cnblogs.com/vamei/archive/2013/03/31/2982240.html 作者:Vamei 出处:http://www.cnblogs.com ...
- 托管到GitHub
如何把项目托管到GitHub iOS开发拓展篇——如何把项目托管到GitHub 说明:本文主要介绍如何把一个OC项目托管到Github,重操作轻理论. 第一步:先注册一个Github的账号,这是必须的 ...
- SDL2源码分析6:拷贝到渲染器(SDL_RenderCopy())
===================================================== SDL源码分析系列文章列表: SDL2源码分析1:初始化(SDL_Init()) SDL2源 ...
- 无限层级且乱序的树形结构数据的整理,利用HashMap降低遍历次数
我们在展示一个机构树的时候,经常会遇到这种一个问题,查询数据的时候,是从下往上查的,但展示数据的时候,又要从下往上展示. 这时候就要把查询到的数据进行整理从而得到我们想要的结构. 举个样例. ID P ...
- ASP.NET - 编写让别人能读懂的代码
http://www.cnblogs.com/richieyang/p/4840614.html