Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
272
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@susieyy

AFNetworkのSwift版 Alamofireを試してみた

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

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
272
Help us understand the problem. What are the problem?