寿司は左から食え

個人的なメモ。技術ブログほどでもない。

Alamofireの基本メモ

Swiftで書かれたHTTP通信に関するライブラリ

request関数

パラメータを何も持たないGETリクエスト

override func viewDidLoad() {
    super.viewDidLoad()       
    Alamofire.request(.GET, "http://localhost/login.json")
}

GETメソッドのHTTPリクエストを送っている

第一引数ではHTTPメソッドの指定を行っている。

HTTPメソッドの種類は以下の通り

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"
}

第二引数では、URLStringConvertibleプロトコルに準拠した型が入る

以下の4つのようなものがある。

  • String
  • NSURL
  • NSURLComponents
  • NSURLRequest

response関数

HTTPリクエストに対してのレスポンスを取り扱う

リクエストからのレスポンス

override func viewDidLoad() {
    super.viewDidLoad()
    Alamofire
        .request(.POST, "http://localhost/content.json")
        .response() {request, response, data, error in
            // レスポンスハンドリング
    }
}

メソッドや関数に対しては()の外に関数引数を置く事ができる(Trailing Closure)

レスポンスハンドラのみを引数に持つ、responseを呼んだ際に渡される引数は次の通りです。

  • request(第一引数): Foundationフレームワークで HTTPリクエストを表す NSURLRequest のインスタンスです。Requestクラスのリクエスト内容を表します。
  • response(第二引数):Foundationフレームワークで HTTPレスポンスのメタデータを表す NSHTTPURLResponse のインスタンスです。
  • data(第三引数):HTTPレスポンスに含まれるバイト文字列から生成されるオブジェクトです。このメソッドの場合、NSData のオブジェクトが得られます。
  • error(第四引数):HTTP通信エラーを表します。

JSONとして取り扱いたい場合

JSONリアライザでresponseメソッドを叩くresponseJSONメソッドが用意されている。

public func responseJSON(
    options: NSJSONReadingOptions = .AllowFragments, // バイト列からJSONオブジェクト書き出しの際のオプションを指定
    completionHandler: (
        NSURLRequest, // リクエスト内容
        NSHTTPURLResponse?, // レスポンスメタデータ
        AnyObject?, // JSONオブジェクトを示すルートArray or Dictionary
        NSError?) // エラーオブジェクト
        -> Void
    ) // レスポンスハンドラ
    -> Self // Requestクラス

リクエストからのレスポンス(JSON)

override func viewDidLoad() {
    super.viewDidLoad()
    Alamofire
        .request(.POST, "http://localhost/content.json", parameters: params)
        .responseJSON {request, response, data, error in
            // レスポンスハンドリング
    }
}

SwiftyJSONといい感じに連携できるみたいなので、次回はSwiftyJSONの勉強でもしてみようかな。

参考サイト