以下の内容はhttps://tnakamura.hatenablog.com/entry/2014/11/17/afnetworking_racextensionsより取得しました。


AFNetworking と ReactiveCocoa を組み合わせる

ReactiveCocoa を導入したからには使い倒す方針でやっていて、 AFNetworking を使った Web API 呼び出しは、次のようにして RACSignal 化している。

let signal = RACSignal.createSignal({ (subscriber) -> RACDisposable! in
    let manager = AFHTTPRequestOperationManager(baseURL:  baseURL)

    let operation = manager.GET(
        path,
        parameters: parameters,
        success: { (operation, response) -> Void in
            subscriber.sendNext(response)
            subscriber.sendCompleted()
        },
        failure: { (operation, error) -> Void in
            subscriber.sendError(error)
        }
    )

    return RACDisposable(block: {
        operation.cancel()
    })
)
return signal

POST や PUT、DELETE も同じ。 たいして難しいコードじゃないけど、RACSignal 化するコードを何度も書くのはDRY じゃないよね。

実は、AFNetworking の拡張があったりする。

こいつを使えば、先ほどのコードを次のように書き変えることができる。

let manager = AFHTTPRequestOperationManager(baseURL:  baseURL)
let signal = manager.rac_GET(path, parameters: parameters)
return signal

成功・失敗のコールバックを引数で渡す必要がなくなって、見た目が非常にシンプル。




以上の内容はhttps://tnakamura.hatenablog.com/entry/2014/11/17/afnetworking_racextensionsより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14