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