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

这个库通过封装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

时间: 2024-08-05 11:07:28

Swift中的HTTP请求的相关文章

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

swift中第三方网络请求库Alamofire的安装与使用 Alamofire是swift中一个比较流行的网络请求库:https://github.com/Alamofire/Alamofire.下面我们就介绍一个这个库的安装与使用. 一.安装包管理工具CocoaPods 由于国内容易被墙,速度也非常的慢,这里我们使用提供的源 http://ruby.taobao.org/ gem sources --remove https://rubygems.org/ gem sources –a htt

Swift中的错误处理

前言 任何代码都会发生错误,这些错误有些是可以补救的,有些则只能让程序崩溃.良好的错误处理能够让你的代码健壮性提高,提高程序的稳定性. 本文的Swift版本:Swift 3 Objective C 返回nil 如果出错了,就返回空是Objective C中的一种常见的处理方式.因为在Objective C中,向nil发送消息是安全的.比如: - (instancetype)init { self = [super init]; if (self) { } //如果初始化失败,会返回nil ret

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

项目名称:HandyJSON 项目地址:https://github.com/alibaba/handyjson 背景 JSON是移动端开发常用的应用层数据交换协议.最常见的场景便是,客户端向服务端发起网络请求,服务端返回JSON文本,然后客户端解析这个JSON文本,再把对应数据展现到页面上. 但在编程的时候,处理JSON是一件麻烦事.在不引入任何轮子的情况下,我们通常需要先把JSON转为Dictionary,然后还要记住每个数据对应的Key,用这个Key在Dictionary中取出对应的Val

swift中的optional

optional一些理解和总结: Optional作为一种类型,既可以存储一个值,也可以为空(也就是swift里的nil): 其实为一个枚举类型,包含nil或者一个值,如下: enum Optional<T>: _Reflectable, NilLiteralConvertible { case None case Some(T) //... } 它只有两种状态,包含一个值或者为空:optional有效解决了值为空的清空:我们可以通过判断一个对象是否为空了做出相应解决,通过if let a =

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

首先呢  把你需要的第三方库导入到你的项目中来  具体怎么导入 这不是这篇的重点  看上一篇 废话不多  直接上 (1)在项目中直接建一个 oc 的控制器  然后xcode会提醒你  要不要建造桥接文件  选择创建就OK了  看下图最下面  是我创建的 (2)确定使用那个桥接头文件 如下图 (3)在桥接文件里  直接这样写  如下图 (4)然后你就可以在你的项目中使用你添加的库了  就是这么简单 下面来看一下 我在swift中使用的AFNetworking 的实例代码  请求的是百度首页的数据

在Swift中应用Grand Central Dispatch(上)

本文翻译自raywenderlich,原文:Grand Central Dispatch Tutorial for Swift: Part 1/2尽管Grand Central Dispatch(GCD)已经存在一段时间了,但并非每个人都知道怎么使用它.这是情有可原的,因为并发很棘手,而且GCD本身基于C的API在Swift世界中很刺眼. 在这两篇教程中,你会学到GCD的来龙去脉.第一部分解释了GCD可以做什么和几个基本功能.第二部分,你会学到一些GCD所提供的进阶功能. 起步 libdispa

[译] 探究 Swift 中的 Futures &amp; Promises

原文地址:Under the hood of Futures & Promises in Swift 原文作者:John Sundell 译者:oOatuo 校对者:Kangkang, Richard_Lee 探究 Swift 中的 Futures & Promises 异步编程可以说是构建大多数应用程序最困难的部分之一.无论是处理后台任务,例如网络请求,在多个线程中并行执行重操作,还是延迟执行代码,这些任务往往会中断,并使我们很难调试问题. 正因为如此,许多解决方案都是为了解决上述问题而

swift中collectionView的简单用法

之前写过OC中collectionView的用法,现在再看看swift中collectionView的用法,有兴趣的朋友,可以两者前后比较下区别,swift现在没有稳定下来,语法更新的比较快,但是它核心的一些东西,已经定型了.这些还是靠读者们自己去挖掘吧. //这里签署数据源和代理,此时不需要引入layout的代理,也可以.class AmonViewController: UIViewController ,UICollectionViewDataSource,UICollectionView

怎样在Swift中使用CocoaPods

怎样在Swift中使用CocoaPods 它不是神秘的亚马逊区域的部落人用手捡出来的生可可的豆荚,肯定不是!让CocoaPods website来回答可能是最好的: CocoaPods是Cocoa项目的依赖管理工具.它有上千个能帮你优雅地扩充自己项目的库. 优雅地扩展项目听起来很令人好奇,但是什么是依赖管理工具呢?你为什么会需要它呢? 无论你正在创建一个什么样的app,你都有可能会用到别的开发者的代码,无论是以框架的形式还是库的形式.你可能很熟悉UIKit和Foundation,这两个都是苹果提