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を利用したほうがよさそうです。