LoginSignup
279
272

More than 5 years have passed since last update.

AFNetworkのSwift版 Alamofireを試してみた

Posted at

alamofire.png

AlamofireはSwiftで書かれたHTTPネットワークライブラリです。作者はAFNetworkingのメインコミッターとしても有名なMatttさんです。9月7日時点でまだ21コミットほどしかありませんが、GitHubスターも3500ほどあり、機能としても実用十分なものを備えています。コードを見てみるとSwiftのパワフルな特性と活かした非常に簡素で可読性の高い記述がされています。コードも1000行ほどでSwiftの勉強教材としても大変役に立つかと思います。

機能

以下の機能があります。AFNetworkingにあるUIImageViewの拡張はありません。

  • 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

必要環境

  • Xcode 6 Beta 6
  • iOS 7.0+ / Mac OS X 10.9+

インストール

  • Alamofire.xcodeprojをプロジェクトにドラッグして追加します
  • Build PhasesのTarget DependenciesにAlamofireを追加します

スクリーンショット 2014-09-07 12.57.26.png

  • AlamofireをImportします
import Alamofire

スクリーンショット 2014-09-07 13.03.47.png

以上で利用できる状態となります。

使い方

Alamofireの使い方の一部抜粋です。そのたはAlamofireのREADMEをご確認ください。

GET Request

Alamofireのリクエストオブジェクトを作成します。

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

With Parameters

リクエストパラメーターをセットします。

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

With Response Handling

リクエストオブジェクトのレスポンスメソッドをコールすると非同期通信が開始され、完了時にクロージャが実行されます。

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

With Response String Handling

レスポンスをStringで受け取りたい場合は、responseStringをコールします。

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

HTTP Methods

RFC 2616 に定義されている HTTP methods がenumとして利用できます。

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(.POST, "http://httpbin.org/post")

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

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

POST Request

POSTリクエストはDictionary形式でパラメーターを渡すと、自動的にリクエストボディにセットして送信してくれます。

let parameters = [
    "foo": "bar",
    "baz": ["a", 1],
    "qux": [
        "x": 1,
        "y": 2,
        "z": 3
    ]
]

Alamofire.request(.POST, "http://httpbin.org/post", parameters: parameters)
foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3

Parameter Encoding

パラメーターエンコーディングを変更することでJSON形式でリクエストパラメーターを送ることもできます。

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

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

POST Request with JSON Response

JSON形式で受領したレスポンスをでシリアライズしてDictionary形式で受け取る方法です。リクエストに対してresponseJSONをコールします。

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

Built-In Response Methods

レスポンス形式は以下のように選択できます。

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

License

Alamofire is released under an MIT license. See LICENSE for more information.

まとめ

Swiftらしい記述で手軽にHTTP通信が行えます。作者も実績のあり著名なMatttさんなので安心です。
Swiftのコードレーディングにも大変おすすめな実装です。自分も大変勉強になりました。

279
272
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
279
272