2014年8月23日土曜日

【swift】APIを叩く時のやり方をswiftで書き直す Blocks,AFNetworling

API叩く時に今までだとAFnetworking使って、通信用のマネージャクラス書いて、
API用のスタティックメソッド書いてってかんじだった。

これをswiftで書き直すと以下のようになる。
まずは通信管理クラス

import UIKit

class NetworkManager: AFHTTPRequestOperationManager {
    class var sharedInstance : NetworkManager {
    struct Static {
        static var onceToken : dispatch_once_t = 0
        static var instance : NetworkManager? = nil
        }
        dispatch_once(&Static.onceToken) {

            Static.instance = NetworkManager(baseURL: NSURL(string: "http://XXX"))
            Static.instance?.securityPolicy = AFSecurityPolicy.defaultPolicy()
            
        }
        return Static.instance!
    }
}

次にAPI管理クラス
import UIKit

class TASKAPI: NSObject {
    class func testGet(query:NSDictionary!,
               success: ((NSArray!) -> Void)!,
               failure: ((NSError!) -> Void)!)->Void
    {
        var operationCtn:NSInteger = NetworkManager.sharedInstance.operationQueue.operationCount
        if(operationCtn == 0){
        
            NetworkManager.sharedInstance.GET(
                "user/read",
                parameters: query,
                success:
                {(operaton:AFHTTPRequestOperation!, response:AnyObject!)->Void in
//                    var res:NSDictionary = response as NSArray
                    success(response as NSArray)
                },
                failure:
                {(operation:AFHTTPRequestOperation!, err:NSError!)->Void in
                    failure(err)
                }
            )
        }
    }
    
    func get(query:NSDictionary!,
        success: ((NSDictionary!) -> Void)!,
        failure: ((NSError!) -> Void)!)
    {
        
    }
}

さいごに呼び出し

        
TASKAPI.login(NSDictionary(),
       {(res:NSArray!)->Void in
            NSLog("%@", res[0].description)
       },
       {(err:NSError!)->Void in      
       })

こんなかんじで実装してみました。
注意する点・難しかった点としては

  1. API管理クラスの中ではちゃんとclass funcで静的なものにしないと
    なぞのメソッドが呼ばれる
  2. swiftのブロックスの書き方が慣れない・・・
  3. 呼び出しにはわざわざ返り値と引数型なくてもいけそう
以上。


0 件のコメント:

コメントを投稿

ShareThis