您的位置:首页 > 理论基础 > 计算机网络

Alamofire-Swift Networking网络库

2015-08-17 14:49 597 查看
Alamofire
Swift 语言的
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",
"baz": ["a", 1],
"qux": [
"x": 1,
"y": 2,
"z": 3
]
]

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


发送以下HttpBody内容:
foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3


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)[0]
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: "httpbin.org", port: 0, `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"


更多的用法将会在接口文档中一一列出,敬请期待。

Alamofire与AFNetworking是同一个作者
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: