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

这个库通过封装NSURLConnectionNSOperationQueue实现了简单的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”

    下面简单展示了AFNetworkingGET的用法:

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

    from:http://swiftist.org/topics/135

[Swift A] - HTTP请求的更多相关文章

  1. swift网络数据请求方法

    搭建一个apache服务器,用php编写一个返回给客户端请求数据的脚本 <?php // header("Content-type:text/html;charset=utf-8&qu ...

  2. Swift: Alamofire -> http请求 & ObjectMapper -> 解析JSON

    1 2 3 4 5 6 7 8 9 10 11 NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.js ...

  3. Swift 网络请求数据与解析

    一: Swift 网络数据请求与处理最常用第三方 又有时间出来装天才了,还是在学swift,从中又发现一些问题,这两天上网找博客看问题弄的真的心都累.博客一篇写出来,好多就直接照抄,就没有实质性的把问 ...

  4. iOS - NetRequest 网络数据请求

    1.网络请求 1.1 网络通讯三要素 1.IP 地址(主机名): 网络中设备的唯一标示.不易记忆,可以用主机名(域名). 1) IP V4: 0~255.0~255.0~255.0~255 ,共有 2 ...

  5. openstack swift middleware开发

    首先MiddleWare核心代码,这段代码卸载swift的源代码目录下,~/swift/swift/common/middleware下新建deletionpreventing.py: import ...

  6. iOS --- [持续更新中] iOS移动开发中的优质资源

    在我们做iOS APP的开发过程中, 须要非常多设计, 产品, 技术, 运营等方面的技巧和资源. 现将其整理汇总, 本文会一直持续更新. 敬请关注. 设计 Dribbble Dribbble是一个面向 ...

  7. 以Docker容器方式安装Ceph

    获取Ceph的Docker镜像 因为公司对于网络环境的限制,安装ceph时使用ceph-deploy反而很不方便,且ssh免密码方式也不适用,所以使用docker方式安装. Git地址 https:/ ...

  8. mysql表前缀

    之前一直没明白,mysql有些规范里面,建议建表的时候添加前缀,它的意义究竟是为何.直到最近,我想学习一下Swift的网络请求,于是打算在新浪云新建个项目却发现新浪云免费用户最多只能建立5个项目.于是 ...

  9. iOS:开发常用GitHub开源项目(持续更新)

    IOS开发常用GitHub开源项目(持续更新) 数据类 开源库 作者 简介 AFNetworking Mattt 网络请求库 ASIHTTPRequest pokeb 网络请求库 Alamofire ...

随机推荐

  1. android studio安卓工作室 工具栏

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha android studio安卓工作室 工具栏  都有什么 . 打开.保存全部.刷新.撤 ...

  2. BZOJ 1260 [CQOI2007]涂色paint(区间DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1260 [题目大意] 假设你有一条长度为n的木版,初始时没有涂过任何颜色 每次你可以把一 ...

  3. view加阴影和边框

    UIImageView *imgvPhoto  = [UIImageView alloc] init]; //添加边框   CALayer *layer = [_imgvPhoto layer];   ...

  4. 重拾vue1

    vue 一.认识Vue 定义:一个构建数据驱动的 web 界面的渐进式框架 优点: 1.可以完全通过客户端浏览器渲染页面,服务器端只提供数据 2.方便构建单页面应用程序(SPA) 二.引入Vue &l ...

  5. 广义线性模型(logistic和softmax)

    再谈广义线性模型之前,先来看一下普通线性模型: 普通线性模型的假设主要有以下几点: 1.响应变量Y和误差项ϵ正态性:响应变量Y和误差项ϵ服从正态分布,且ϵ是一个白噪声过程,因而具有零均值,同方差的特性 ...

  6. Xcode 6.4项目中的常见文件(info.plist)

    Xcode 6.4项目中的常见文件(info.plist) 代码中获取 info.plist[NSBundle mainBundle] infoDictionary]; Bundle display ...

  7. mysql锁机制整理

    Auth: jinDate: 20140506 主要参考整理资料MYSQL性能调优与架构设计-第七章 MYSQL锁定机制http://www.cnblogs.com/ggjucheng/archive ...

  8. GridControl事件

    private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventA ...

  9. JAVA常见集合类

    菜鸟教程 http://www.runoob.com/java/java-collections.html TreesSet原理: https://blog.csdn.net/wangyunpeng0 ...

  10. Tex系列: pgfplots安装

    (1)  上网下载最新宏包压缩包 http://sourceforge.net/projects/pgfplots/files/pgfplots/ (2)解压压缩包,把该包下的tex子目录拷贝至D:\ ...