AFNetworkingを使った簡易クライアントをSwiftで書いてみました。
Objective-CのライブラリをSwiftで利用
Cocoa Podsかなんかで適当にAFNetworkingを入れておきます。
APIClientを作成
AFHTTPSessionManagerのサブクラスを作る形でAPIクライアントを作成します。
AFHTTPSessionManagerはiOS6以下では利用することができないので、iOS6以下をターゲットにしている方は以下の方法は使えません。
MyClient.swift
import UIKit class MyClientRequestSerializer: AFHTTPRequestSerializer{ override func requestWithMethod(method: String!, URLString: String!, parameters: AnyObject!, error:NSErrorPointer) -> NSMutableURLRequest! { var path:NSString = URLString + "?" var dictParameters:Dictionary<String, String> if (parameters != nil){ dictParameters = parameters as Dictionary<String, String> } else{ dictParameters = Dictionary<String, String>() } for key in dictParameters.keys{ let value = dictParameters[key] path = path.stringByAppendingFormat("&%@=%@", key, value!) } let req = super.requestWithMethod(method, URLString: path, parameters: nil, error: error) return req } } class MyClient: AFHTTPSessionManager { class var sharedInstance : MyClient { struct Static { static var instance : MyClient = MyClient(baseURL:NSURL(string:"https://api.github.com/")) } return Static.instance } override init(baseURL url: NSURL!, sessionConfiguration configuration: NSURLSessionConfiguration!) { super.init(baseURL: url, sessionConfiguration: nil) } override init(baseURL url: NSURL!) { super.init(baseURL: url) let requestSerializer = MyClientRequestSerializer() self.requestSerializer = requestSerializer // If you need a responseSerializer, you can write it } required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } func yourAPI(){ self.GET("users/kouki-dan/repos", parameters: ["none":"none"], success: { (task, response) in println(response) }, failure: { (error) in println("error") }) } func yourAPI2(id:NSString){ //... } //....... }
APIクライアントはこのような感じになります。
yourAPIの所でエンドポイントを記述して、実際にHTTPリクエストを呼び出しています。
APIを利用する時は
func yourFunc(){ let sharedClient = MyClient.sharedInstance sharedClient.yourAPI() }
のように使います。