Alamofire详解

预览图

Swift Alamofire 简介

AlamofireSwift 语言的 HTTP 网络开发工具包,相当于Swift实现AFNetworking版本。

当然,AFNetworking非常稳定,在Mac OSX与iOS中也能像其他Objective-C代码一样用Swift编写。不过Alamofire更适合Swift语言风格习惯(Alamofire与AFNetworking可以共存一个项目中,互不影响).

Alamofire 取名来源于Alamo Fire flower

Alamofire安装使用方法

使用CocoaPods安装,在podfile

 source 'https://github.com/CocoaPods/Specs.git'
 platform :ios, '8.0'
 use_frameworks!

 pod 'Alamofire', '~> 1.2'

submodule 方式安装  $ git submodule add https://github.com/Alamofire/Alamofire.git 

1.下载源码将Alamofire.xcodeproj拖拽至工程中如下图:

2.工程->Build Phases->Target Dependencies 增加Alamofire

3.点击如下图“+”按钮选择"New Copy Files Phase"添加,改名为“Copy Frameworks”并 选择选项下的“ Destination”为“ Frameworks”,然后添加“Alamofire.framework”

4.在需要使用的swift文件中加入import Alamofire,如下图:

功能

  • Chainable Request / Response methods
  • URL / JSON / plist Parameter Encoding
  • Upload File / Data / Stream
  • Download using Request or Resume data
  • Authentication with NSURLCredential
  • Progress Closure & NSProgress
  • cURL Debug Output

1.0版本计划

1.0版本将在Swift 1.0发布之后。

  • 100% Unit Test Coverage
  • Complete Documentation
  • HTTP Response Validation
  • TLS Chain Validation
  • UIKit / AppKit Extensions

环境要求

Xcode 6

iOS 7.0+ / Mac OS X 10.9+

Alamofire使用方法

GET 请求

  Alamofire.request(.GET, "http://httpbin.org/get") 

带参数

 Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
 

Response结果处理

 Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
          .response { (request, response, data, error) in
                      println(request)
                      println(response)
                      println(error)
                    }

Response结果字符串处理

 Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
          .responseString { (request, response, string, error) in
                   println(string)
          }

HTTP 方法(Medthods)

Alamofire.Method enum 列表出在RFC 2616中定义的HTTP方法 §9:

 public enum Method: String {
     case OPTIONS = "OPTIONS"
     case GET = "GET"
     case HEAD = "HEAD"
     case POST = "POST"
     case PUT = "PUT"
     case PATCH = "PATCH"
     case DELETE = "DELETE"
     case TRACE = "TRACE"
     case CONNECT = "CONNECT"
 }

这些值可以作为Alamofire.request请求的第一个参数.

 Alamofire.request(.POST, "http://httpbin.org/post")

 Alamofire.request(.PUT, "http://httpbin.org/put")

 Alamofire.request(.DELETE, "http://httpbin.org/delete")

POST请求

 let parameters = [
     "foo": "bar",
     ],
     "qux": [
         ,
         ,

     ]
 ]

  Alamofire.request(.POST, "http://httpbin.org/post", parameters: parameters) 

发送以下HttpBody内容:

  foo=bar&baz[]=a&baz[]=&qux[x]=&qux[y]=&qux[z]= 

Alamofire 使用Alamofire.ParameterEncoding可以支持URL query/URI form,JSON, PropertyList方式编码参数。

Parameter Encoding

 enum ParameterEncoding {
     case URL
     case JSON(options: NSJSONWritingOptions)
     case PropertyList(format: NSPropertyListFormat,
                       options: NSPropertyListWriteOptions)

     func encode(request: NSURLRequest,
                 parameters: [String: AnyObject]?) ->
                     (NSURLRequest, NSError?)
     { ... }
 }

NSURLRequest方式编码参数

 let URL = NSURL(string: "http://httpbin.org/get")
 var request = NSURLRequest(URL: URL)

 let parameters = ["foo": "bar"]
 let encoding = Alamofire.ParameterEncoding.URL
 (request, _) = encoding.encode(request, parameters)

POST JSON格式数据

 Alamofire.request(.POST, "http://httpbin.org/post", parameters: parameters, encoding: .JSON(options: nil))
          .responseJSON {(request, response, JSON, error) in
             println(JSON)
          }
 

Response 方法

  • response()
  • responseString(encoding: NSStringEncoding)
  • responseJSON(options: NSJSONReadingOptions)
  • responsePropertyList(options: NSPropertyListReadOptions)

上传(Uploading)

支持的类型

  • File
  • Data
  • Stream
  • Multipart (Coming Soon)

上传文件

 let fileURL = NSBundle.mainBundle()
                       .URLForResource("Default",
                                       withExtension: "png")

 Alamofire.upload(.POST, "http://httpbin.org/post", file: fileURL)

上传进度

 Alamofire.upload(.POST, "http://httpbin.org/post", file: fileURL)
         .progress { (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in
             println(totalBytesWritten)
         }
         .responseJSON { (request, response, JSON, error) in
             println(JSON)
         }
 

下载

支持的类型

  • Request
  • Resume Data

下载文件

 Alamofire.download(.GET, "http://httpbin.org/stream/100", destination: { (temporaryURL, response) in
     if let directoryURL = NSFileManager.defaultManager()
                           .URLsForDirectory(.DocumentDirectory,
                                             inDomains: .UserDomainMask)[]
                           as? NSURL {
         let pathComponent = response.suggestedFilename

         return directoryURL.URLByAppendingPathComponent(pathComponent)
     }

     return temporaryURL
 })
 

下载到默认路径

 let destination = Alamofire.Request.suggestedDownloadDestination(directory: .DocumentDirectory, domain: .UserDomainMask)

 Alamofire.download(.GET, "http://httpbin.org/stream/100", destination: destination)
 

下载进度

 Alamofire.download(.GET, "http://httpbin.org/stream/100", destination: destination)
          .progress { (bytesRead, totalBytesRead, totalBytesExpectedToRead) in
              println(totalBytesRead)
          }
          .response { (request, response, _, error) in
              println(response)
          }
 

认证(Authentication)

支持以下几种认证

  • HTTP Basic
  • HTTP Digest
  • Kerberos
  • NTLM

Http basic认证

 let user = "user"
 let password = "password"

 Alamofire.request(.GET, "https://httpbin.org/basic-auth/\(user)/\(password)")
     .authenticate(HTTPBasic: user, password: password)
     .response {(request, response, _, error) in
         println(response)
         }

采用NSURLCredential&NSURLProtectionSpace方式认证

 let user = "user"
 let password = "password"

 let credential = NSURLCredential(user: user, password: password, persistence: .ForSession)
 let protectionSpace = NSURLProtectionSpace(host: , `protocol`: "https", realm: nil, authenticationMethod: NSURLAuthenticationMethodHTTPBasic)

 Alamofire.request(.GET, "https://httpbin.org/basic-auth/\(user)/\(password)")
     .authenticate(usingCredential: credential, forProtectionSpace: protectionSpace)
     .response {(request, response, _, error) in
         println(response)
 }

Printable

 let request = Alamofire.request(.GET, "http://httpbin.org/ip")

 println(request)
 // GET http://httpbin.org/ip (200)

调试

     let request = Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])

 debugPrintln(request)

Output (cURL)

 $ curl -i \
     -H "User-Agent: Alamofire" \
     -H "Accept-Encoding: Accept-Encoding: gzip;q=1.0,compress;q=0.5" \
     -H "Accept-Language: en;q=1.0,fr;q=0.9,de;q=0.8,zh-Hans;q=0.7,zh-Hant;q=0.6,ja;q=0.5" \
     "http://httpbin.org/get?foo=bar"
 

iOS开发——网络编程Swift篇&Alamofire详解的更多相关文章

  1. iOS开发——网络编程Swift篇&(八)SwiftyJSON详解

    SwiftyJSON详解 最近看了一些网络请求的例子,发现Swift在解析JSON数据时特别别扭,总是要写一大堆的downcast(as?)和可选(Optional),看?号都看花了.随后发现了这个库 ...

  2. iOS开发——网络编程Swift篇&(七)NSURLSession详解

    NSURLSession详解 // MARK: - /* 使用NSURLSessionDataTask加载数据 */ func sessionLoadData() { //创建NSURL对象 var ...

  3. iOS开发——网络编程Swift篇&(二)同/异&步请求

    同/异&步请求 同步: // MARK: - 同步请求 func httpSynchronousRequest() { //创建NSURL对象 var url:NSURL! = NSURL(s ...

  4. iOS开发——网络编程Swift篇&(一)网络监测

    网络监测 enum ReachabilityType { case WWAN, WiFi, NotConnected } public class Reachability { /** :see: O ...

  5. iOS开发——网络编程Swift篇&(六)异步Post方式

    异步Post方式 // MARK: - 异步Post方式 func asynchronousPost() { //创建NSURL对象 var url:NSURL! = NSURL(string: &q ...

  6. iOS开发——网络编程Swift篇&(五)同步Post方式

    同步Post方式 // MARK: - 同步Post方式 func synchronousPost() { //创建NSURL对象 var url:NSURL! = NSURL(string: &qu ...

  7. iOS开发——网络编程Swift篇&(四)异步Get方式

    异步Get方式 // MARK: - 异步Get方式 func asynchronousGet() { //创建NSURL对象 var url:NSURL! = NSURL(string: " ...

  8. iOS开发——网络编程Swift篇&(三)同步Get方式

    同步Get方式 // MARK: - 同步Get方式 func synchronousGet() { //创建NSURL对象 var url:NSURL! = NSURL(string: " ...

  9. iOS开发——网络编程OC篇&(一)XMPP简单介绍与准备

    XMPP简单介绍与准备 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈 ...

随机推荐

  1. 用R语言分析我的fitbit计步数据

    目标:把fitbit的每日运动记录导入到R语言中进行分析,画出统计图表来 已有原始数据:fitbit2014年每日的记录电子表格文件,全部数据点此下载,示例如下: 日期 消耗卡路里数 步 距离 攀爬楼 ...

  2. C语言异常与断言接口与实现

    程序中通常会出现三种错误:用户错误.运行期错误以及异常 欢迎关注我的个人博客:www.wuyudong.com, 更多精彩文章与您分享 标准库函数setjmp和longjmp 在C语言中,标准库函数s ...

  3. Windows 7 与 Vmware Ubuntu 15.10_64 共享文件夹

    设置共享文件夹     安装/更新最新的vmware-tools   安装             在ubuntu 内部会打开DVD ,里面的压缩包中包含vmware-toole. 先解压      ...

  4. struts2.3.24 + spring4.1.6 + hibernate4.3.11+ mysql5.5.25开发环境搭建及相关说明

    一.目标 1.搭建传统的ssh开发环境,并成功运行(插入.查询) 2.了解c3p0连接池相关配置 3.了解验证hibernate的二级缓存,并验证 4.了解spring事物配置,并验证 5.了解spr ...

  5. Oracle日期周详解IW

    1 ORACLE中周相关知识描述 1.1           日期格式化函数 TO_CHAR(X [,FORMAT]):将X按FORMAT格式转换成字符串.X是一个日期,FORMAT是一个规定了X采用 ...

  6. 大数据公益课堂成就你高薪之梦,30W,50W,100W...

    从之前的知道“大数据”这词,到2013年正式开始了解大数据领域,再到2014年深入研究大数据相关的领域,到现在逐渐影响周围的同学.朋友和家人.大数据技术将给我们带来的远不止我们想到的这些.曾经我身边的 ...

  7. [转][原]openstack-kilo--issue(六)kilo版openstack的dashboard在session超时后重新登录报错解决办法

    http://blog.csdn.net/wylfengyujiancheng/article/details/50523373?locationNum=1&fps=1 1.现象描述: kil ...

  8. cut

    cut是一个针对行的数据选取命令 SYNOPSIS cut [OPTION]... [FILE]... OPTION -b 以字节为单位进行分割,如果是多字节的话就需要注意了 -c 以字符为单位进行分 ...

  9. Java基础の第一弹

    一.虚拟机的工作机制 (1) :通过 ClassLoader 寻找和装载 class 文件 (2) :解释字节码成为指令并执行,提供 class 文件的运行环境 (3) :进行运行期间垃圾回收 (4) ...

  10. 形如(function(){}).call()的js语句

    研究新浪微博的自动登陆流程,其中涉及到它的加密算法脚本,其中有一段如下形式的代码: (function(){...}).call(name) 其中红色的....是函数的内部各种实现,name为一个对象 ...