Help us understand the problem. What is going on with this article?

AFNetworkのSwift版 Alamofireを試してみた

More than 5 years have passed since last update.

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のコードレーディングにも大変おすすめな実装です。自分も大変勉強になりました。

susieyy
フリーランス - スタートアップエンジニアリングアドバイザー - iOS技術顧問 - プロトタイプ開発
https://susieyy.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした