ネットワーク関連メソッドの返り値は void じゃなくて RAC を使って返す

  • 14
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

ネットワーク関連のメソッド、どうしても返り値を void にしてしまいますね。

私はそれなりにメソッドを細かく切る派なので、AF で GET するだけのメソッド等をよく作ります。
このようなメソッドは、引数にブロックをとり、返り値を void にするかと思います。

しかし、そのようにすると getHogeHuga などの名前のメソッドで void を返すことになり気持ち悪いですね。
こういうときは ReactiveCocoa を使うと良いです。

HogeClient.m
- (RACSignal *)getHogeHuga {
    return [[AFHTTPRequestOperationManager manager] rac_GET:@"HOGE_URL" parameters:nil];
};

呼び出し側は、

[[hogeClient getHogeHuga] subscribeNext:^(id JSON) {
  // DO SOMETHING
} error:^(NSError *error) {
  // DO ERROR HANDLING
}];

やってることはそんなに変わらないけどそこそこ心洗われる文法になりましたね。

ちなみに Pod は

Podfile
pod "AFNetworking"
pod "ReactiveCocoa"
pod "AFNetworking-RACExtensions"

同じことは PromiseKit でも出来ますがエラーが別ブロックに分かれてくれない(多分)ので RAC で良いと思います(小並感)