LoginSignup
69
64

More than 5 years have passed since last update.

SwiftでAlamofireとAFNetworkingの使い方を比較してみる

Last updated at Posted at 2014-10-28

Mattt Thompsonさんが開発した、Swift用のAFNetworkingと、Alamofireをそれぞれ使ってみました。
それぞ、https://itunes.apple.com/search?term=apple&media=software に対してGETしてアプリのタイトルを表示するというようなコードになっています。

Alamofireを使う

AlamofireをSwiftのプロジェクトに導入する方法はHTTP通信OSS Alamofire 導入編が参考になります。

コードは下記のようになります。
レスポンスはresponseJSONメソッドを利用した後に、SwiftyJSONを利用して処理しています。
responseの内容(responseData)はoptional型で定義されているので、Optional Bindingしています。

import Foundation
import Alamofire
import SwiftyJSON

let urlPath = "https://itunes.apple.com/search?term=apple&media=software"

Alamofire.request(.GET, urlPath).responseJSON { (request, response, responseData, error) -> Void in
    // titleを表示
    if let data: AnyObject = responseData {
        println("Success")
        let results = JSON(data)
        let count: Int? = results["results"].array?.count
        if let num = count {
            for index in 0..<num {
                let title = results["results"][index]["trackName"].string!
                println("tilte is {\(title)}")
            }
        }
    }

    // Error処理
    if let resError = error {
        println("Connection failed.\(resError.localizedDescription)")
        println("Failure:\(urlPath)")
    }
}

AFNetworkingを使う

SwiftプロジェクトへのCocoaPodsの導入方法については、SwiftとAFNetworkingの簡単サンプルが参考になります。
AFNetworkingの利用方法はド定番OSS!AFNetworking 2.xの使い方が参考になります。

コードは下記のようになります。
AFNetworkingを利用する場合は、Alamofireのようにoptional型は出てきません。
Blocksの代わりにクロージャーを利用します。

let urlPath: NSString = "https://itunes.apple.com/search?term=apple&media=software"

let manager :AFHTTPSessionManager = AFHTTPSessionManager()
manager.GET(urlPath, parameters:nil,
    success: { (task, responseObject) -> Void in
        // titleを表示
       println("Success")
        if responseObject.count > 0 {

            for results in responseObject["results"] as NSArray {
                let title = results["trackName"].string!
                println("tilte is {\(title)}")
            }
        }

    },
    failure:{ (task, error) -> Void in
        println("Connection failed.\(error.localizedDescription)")
        println("Failure:\(urlPath)")
})

感想

Swiftで書かれたAlamofireを使用したが方がSwiftっぽいコードになった気がします。
ただしAlamofireにはAFNetworkingのようなUIKit Extensionは提供されていないので、UIKit Extension相当の機能を使いたい場合は、他のライブラリと組み合わせて実現するか、AFNetworkingを利用したほうがよさそうです。

69
64
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
69
64