Swift中的HTTP请求
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)")
})
Swift中的HTTP请求的更多相关文章
- swift中第三方网络请求库Alamofire的安装与使用
swift中第三方网络请求库Alamofire的安装与使用 Alamofire是swift中一个比较流行的网络请求库:https://github.com/Alamofire/Alamofire.下面 ...
- 阿里巴巴最新开源项目 - [HandyJSON] 在Swift中优雅地处理JSON
项目名称:HandyJSON 项目地址:https://github.com/alibaba/handyjson 背景 JSON是移动端开发常用的应用层数据交换协议.最常见的场景便是,客户端向服务端发 ...
- 在Swift中应用Grand Central Dispatch(下)
在第一部分中, 你学到了并发,线程以及GCD的工作原理.通过使用dispatch_barrrier和dispatch_sync,你做到了让 PhotoManager单例在读写照片时是线程安全的.除此之 ...
- 在Swift中应用Grand Central Dispatch(上)转载自的goldenfiredo001的博客
尽管Grand Central Dispatch(GCD)已经存在一段时间了,但并非每个人都知道怎么使用它.这是情有可原的,因为并发很棘手,而且GCD本身基于C的API在 Swift世界中很刺眼. 在 ...
- Swift 中的 Runtime
即使在 Swift APP 中没有一行 Object-c 的代码,每个 APP 也都会在 Object-c runtime 中运行,为动态任务分发和运行时对象关联开启了一个世界.更确切地说,可能在仅使 ...
- 思考 Swift 中的 MirrorType 协议
Swift中的反射非常有限,仅允许以只读方式访问元数据的类型子集.或许 Swift 因有严格的类型检验而不需要反射.编译时已知各种类型,便不再需要进行进一步检查或区分.然后大量的 Cocoa API ...
- 怎样在Swift中使用CocoaPods-b
最近关于CocoaPods有很多的议论.你可能从别的开发者那里听到过,或者在Github的目录中看到过.如果你之前从来没有用过,你可能会问,"CocoaPods到底是什么?" 它不 ...
- 【Swift】 GET&POST请求 网络缓存的简单处理
GET & POST 的对比 源码:https://github.com/SpongeBob-GitHub/Get-Post.git 1. URL - GET 所有的参数都包含在 URL 中 ...
- swift 中使用OC第三方库(以AFNetworking为例)
首先呢 把你需要的第三方库导入到你的项目中来 具体怎么导入 这不是这篇的重点 看上一篇 废话不多 直接上 (1)在项目中直接建一个 oc 的控制器 然后xcode会提醒你 要不要建造桥接文 ...
随机推荐
- Nearest number - 2_暴力&&bfs
Description Input is the matrix A of N by N non-negative integers. A distance between two elements A ...
- 【转】Polymer API开发指南 (一)(翻译)
原文转自:http://segmentfault.com/blog/windwhinny/1190000000592324 翻译的不好,轻拍 Polymer是google的一款前端开发框架,其基于Sh ...
- 【转】互联网全站HTTPS的时代已经到来
原文地址:http://blog.csdn.net/luocn99/article/details/39777707 前言 我目前正在从事HTTPS方面的性能优化工作.在HTTPS项目的开展过程中明显 ...
- magento -- 添加中国省份列表
magento本身的数据库里不包含中国的省份信息,你可以执行以下的SQL语句来添加 添加到directory_country_region表 INSERT INTO `directory_count ...
- 《JS高程》实现继承的6种方式(完整版)
许多OO语言都支持 两种继承方式: (1)接口继承:只继承方法签名: (2)实现继承:继承实际的方法. ECMAScript 由于函数没有签名,无法实现接口继承,因此只支持实现继承,而且主要是依靠原型 ...
- css样式兼容不同浏览器问题解决办法
在网站设计的时候,应该注意css样式兼容不同浏览器问题,特别是对完全使用DIV CSS设计的网,就应该更注意IE6 IE7 FF对CSS样式的兼容,不然,你的网乱可能出去不想出现的效果! 所 有浏览器 ...
- 将文件从一台linux机器拷贝到多台的方法
首先你所操作的各台linux机器间必须设置了ssh免密码登录,具体方法可上网查看.将文件从一台linux机器拷贝到多台分为以下几个步骤: 第一步:创建脚本文件remotecopy.sh #!/bin/ ...
- 解决:导入第三方jar包后,仍然出现java.lang.NoClassDefFoundError的错误
最近,在运行某个Android工程的时候,一直抛出java.lang.NoClassDefFoundError异常. 按照异常所给出的信息,应该是程序使用到的第三方jar包出了问题. 但是,这些第三方 ...
- spring+websocket整合
java-websocket的搭建非常之容易,没用框架的童鞋可以在这里下载撸主亲自调教好的java-websocket程序: Apach Tomcat 8.0.3+MyEclipse+maven+JD ...
- Codeforces Round #129 (Div. 2)
A. Little Elephant and Rozdil 求\(n\)个数中最小值的个数及下标. B. Little Elephant and Sorting \[\sum_{i=1}^{n-1}{ ...