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. Sqli-labs less 11

    Less-11 从这一关开始我们开始进入到post注入的世界了,什么是post呢?就是数据从客户端提交到服务器端,例如我们在登录过程中,输入用户名和密码,用户名和密码以表单的形式提交,提交到服务器后服 ...

  2. Xamarin中Unsupported major.minor version 52.0问题解决

    Xamarin中Unsupported major.minor version 52.0问题解决 出现这种问题,是由于所使用的Java代码使用Java 8所才具有的特性.这个时候,需要将JDK升级到J ...

  3. 大素数判断(miller-Rabin测试)

    题目:PolandBall and Hypothesis A. PolandBall and Hypothesis time limit per test 2 seconds memory limit ...

  4. 【UOJ #79】一般图最大匹配 带花树模板

    http://uoj.ac/problem/79 带花树模板,做法详见cyb的论文或fhq的博客. 带花树每次对一个未盖点bfs增广,遇到奇环就用并查集缩环变成花(一个点),同时记录每个点的Next( ...

  5. [BZOJ1494]生成树计数

    [BZOJ1494] [NOI2007]生成树计数 Description 最近,小栋在无向连通图的生成树个数计算方面有了惊人的进展,他发现:·n个结点的环的生成树个数为n.·n个结点的完全图的生成树 ...

  6. 找出最小元素 Exercise07_09

    import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:找出最小元素 * */ public class Exercise07_0 ...

  7. JavaScript之引用类型(Array类型)

    除了Object类型,Array是ECMAScript中最常用的类型了. 与其他语言不同的是,ECMAScript数组的每一项可以保存任何类型的数据. 而且,ECMAScript数组的大小是可以动态调 ...

  8. 8VC Venture Cup 2016 - Elimination Round D. Jerry's Protest 暴力

    D. Jerry's Protest 题目连接: http://www.codeforces.com/contest/626/problem/D Description Andrew and Jerr ...

  9. Android测试之Keycode

    问题: 昨天做测试Case,发现一个网游APK运行界面,uiautomator无法捕捉获取. 因而输入的时候只得运用(dut.onclick(int a, int y))坐标点击的方法来输入用户名和密 ...

  10. mysql锁机制整理

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