文档章节

Swift中的HTTP请求

evil_01
 evil_01
发布于 2016/05/13 14:31
字数 516
阅读 88
收藏 3

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)")
        })

© 著作权归作者所有

共有 人打赏支持
evil_01
粉丝 9
博文 45
码字总数 29244
作品 0
卢湾
架构师
私信 提问
【原创】Swift服务启动架构分析

Swift中会用到三个非常有用的python模块它们分别是webob,eventlet,paste.deploy,其中webob提供了WSGI封装的Request,Response和其他的一些HTTP操作,eventlet是一个并行的网络编程库,Swift使...

zhouxingxing
2012/10/08
0
0
对于AlamoFire几点思考

本文由CocoaChina--BYB1132(论坛ID)翻译 原文:Thoughts On AlamoFire--Swift’s AFNetworking Implementation HTTP协议就是现代开发的同义词,对于有经验的iOS开发者来说, 熟悉并尽可能使...

刘星石
2016/03/02
15
0
iOS仿写有妖气漫画、视频捕获框架、启动页广告页demo、多种动画效果等源码

iOS精选源码 以tableview的section为整体添加阴影效果/ta'b'le'vi'e'w顶部悬浮....(http://www.code4app.com/thread-30715-1-1.html) 一个可以轻松应用自定义过滤器的视频捕获框架。(http:/...

sunnyaigd
08/15
0
0
openstack swift middleware开发

首先MiddleWare核心代码,这段代码卸载swift的源代码目录下,~/swift/swift/common/middleware下新建deletionpreventing.py: 查看列表: 测试PUT请求: PUT成功; 测试DELETE请求: DELETE请...

Vincent-Duan
2016/10/12
2
0
Alamofire 4.4.0 发布,HTTP 网络开发工具包

Alamofire 4.4.0 发布了,Alamofire 是用一个功能强大的,用 Swift 语言编写的 HTTP 网络开发工具包,支持各种 HTTP Method、JSON、文件上传、文件下载和多种认证方法。 更新内容: 新增 一个...

王练
2017/03/02
780
0

没有更多内容

加载失败,请刷新页面

加载更多

老男孩 - python函数编程day2

mark

以谁为师
11分钟前
0
0
【58沈剑 架构师之路】缓存,究竟是淘汰,还是修改?

允许cache miss的场景,不管是memcache还是redis,当被缓存的内容变化时,是修改缓存,还是淘汰缓存?这是今天将要讨论的话题。 问:KV缓存都缓存了一些什么数据? 答: (1)朴素类型的数据...

张锦飞
13分钟前
0
0
Spring异常之Druid – unregister mbean error set JAVA_OPTS="-Ddruid.registerToSysProperty=true"

Spring异常之Druid – unregister mbean error 2017年04月19日 12:13:42 Dr.Zhu 阅读数:6688 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zt_fucker/arti...

linjin200
14分钟前
0
0
数据结构-图-知识点总结

一、基本术语 图(graph):图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中的顶点的集合,E是图G中边的集合。 顶点(Vertex):图中的数据...

hblt-j
16分钟前
0
0
SAP订单编排和流程增强概述

SAP产品里的订单处理,无论是On-Premises解决方案还是云产品,我认为归根到底可以概括成四个字:订单编排,包含两个层次的内容: 1. 单个订单通过业务流程或者工作流驱动的状态迁移; 2. 多种...

JerryWang_SAP
24分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部