著名的AFNetworking網絡基礎庫Swift版Alamofire

jopen 9年前發布 | 56K 次閱讀 Apple Swift開發 AFNetworking

源代碼

著名的AFNetworking網絡基礎庫Swift版Alamofire

Swift Alamofire 簡介

著名的AFNetworking網絡基礎庫Swift版Alamofire

Alamofire是 Swift 語言的 HTTP 網絡開發工具包,相當于Swift實現AFNetworking版本。

當然,AFNetworking非常穩定,在Mac OSX與iOS中也能像其他Objective-C代碼一樣用Swift編寫。不過Alamofire更適合Swift語言風格習慣(Alamofire與AFNetworking可以共存一個項目中,互不影響).

Alamofire 取名來源于 [Alamo Fire flower](https://aggie-horticulture.tamu.edu/wildseed/alamofire.html)

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

環境要求

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是同一個作者

作者李剛是剛剛在線(www.superqq.com)站長,百度百家專欄作者 iOS工程師非著名自媒體,微信公眾號iOS開發:iOSDevTip運營者

iOSDevTip

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!