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中的HTTP请求的更多相关文章

  1. swift中第三方网络请求库Alamofire的安装与使用

    swift中第三方网络请求库Alamofire的安装与使用 Alamofire是swift中一个比较流行的网络请求库:https://github.com/Alamofire/Alamofire.下面 ...

  2. 阿里巴巴最新开源项目 - [HandyJSON] 在Swift中优雅地处理JSON

    项目名称:HandyJSON 项目地址:https://github.com/alibaba/handyjson 背景 JSON是移动端开发常用的应用层数据交换协议.最常见的场景便是,客户端向服务端发 ...

  3. 在Swift中应用Grand Central Dispatch(下)

    在第一部分中, 你学到了并发,线程以及GCD的工作原理.通过使用dispatch_barrrier和dispatch_sync,你做到了让 PhotoManager单例在读写照片时是线程安全的.除此之 ...

  4. 在Swift中应用Grand Central Dispatch(上)转载自的goldenfiredo001的博客

    尽管Grand Central Dispatch(GCD)已经存在一段时间了,但并非每个人都知道怎么使用它.这是情有可原的,因为并发很棘手,而且GCD本身基于C的API在 Swift世界中很刺眼. 在 ...

  5. Swift 中的 Runtime

    即使在 Swift APP 中没有一行 Object-c 的代码,每个 APP 也都会在 Object-c runtime 中运行,为动态任务分发和运行时对象关联开启了一个世界.更确切地说,可能在仅使 ...

  6. 思考 Swift 中的 MirrorType 协议

    Swift中的反射非常有限,仅允许以只读方式访问元数据的类型子集.或许 Swift 因有严格的类型检验而不需要反射.编译时已知各种类型,便不再需要进行进一步检查或区分.然后大量的 Cocoa API ...

  7. 怎样在Swift中使用CocoaPods-b

    最近关于CocoaPods有很多的议论.你可能从别的开发者那里听到过,或者在Github的目录中看到过.如果你之前从来没有用过,你可能会问,"CocoaPods到底是什么?" 它不 ...

  8. 【Swift】 GET&POST请求 网络缓存的简单处理

     GET & POST 的对比 源码:https://github.com/SpongeBob-GitHub/Get-Post.git 1. URL - GET 所有的参数都包含在 URL 中 ...

  9. swift 中使用OC第三方库(以AFNetworking为例)

    首先呢  把你需要的第三方库导入到你的项目中来  具体怎么导入 这不是这篇的重点  看上一篇 废话不多  直接上 (1)在项目中直接建一个 oc 的控制器  然后xcode会提醒你  要不要建造桥接文 ...

随机推荐

  1. HDOJ-三部曲-1002-Radar Installation

    Radar Installation Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 20000/10000K (Java/Other) ...

  2. 通过 itms-services 协议,发布或者分享 iOS 应用程序

    导读:itms-services 协议常用于 iOS 企业应用的无线部署,这可在不使用 iTunes 的情况下将内部软件发布或者分享给用户. 一.前期准备资料: 1.应用程序 (.ipa) 文件(使用 ...

  3. Windows 2003 AD升级Windows 2008

    把Windows 2008 R2的光盘放到主域控中,运行 adprep32 /forestPrep adprep32 /domainprep adprep32 /domainprep /gpprep ...

  4. jQuery基础学习笔记(1)

    --------2.0以上版本体积更小. --------CDN  内容分发网络(Content delivery network或Content distribution network,常简写成C ...

  5. GIT之一 起步篇

    关于版本控制 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本.采用版本控制系统(VCS) ...

  6. HDU 4888 (网络流)

    Poroblem Redraw Beautiful Drawings (HDU4888) 题目大意 一个n行m列的矩形,只能填0~k的数字. 给定各行各列的数字和,判定有无合法的方案数.一解给出方案, ...

  7. INNO:检测程序是否已经安装,是则弹出卸载提示。

    INNO:检测程序是否已经安装,是则弹出卸载提示. 作者:少轻狂 | 发布:2010-08-05 | 更新:2013-09-05 | 分类:部署 | Disposition | 热度:2816 ℃ 实 ...

  8. Inno如何在安装完成时删除指定的文件夹(下的所有文件及子目录)??

    删除安装目录下的任意文件夹及下的所有文件及子目录,或者删除指定目录的文件夹,要如何做到呢?谢谢!! //删除文件    用 DeleteFile 只能删除一个文件,不能使用通配符来删除多个文件Dele ...

  9. How to use liftover

    First step, installation: download from UCSC genome browser chmod + x Second, very important: to dow ...

  10. Ubuntu下adb的安装

    1.adb简述: adb全称Android Debug Bridge,安卓调试桥接器.它是Android sdk里的一个工具,用这个工具可以直接操作管理android模拟器或者真实的andriod设备 ...