首页 技术 正文
技术 2022年11月13日
0 收藏 726 点赞 3,166 浏览 5444 个字

Alamofire详解

预览图

iOS开发——网络编程Swift篇&Alamofire详解

Swift Alamofire 简介

iOS开发——网络编程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拖拽至工程中如下图: iOS开发——网络编程Swift篇&Alamofire详解

2.工程->Build Phases->Target Dependencies 增加Alamofire iOS开发——网络编程Swift篇&Alamofire详解

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

iOS开发——网络编程Swift篇&Alamofire详解

4.在需要使用的swift文件中加入import Alamofire,如下图: iOS开发——网络编程Swift篇&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"

 

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,500
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,914
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,747
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,504
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,142
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,306