ネットワーク関連のメソッド、どうしても返り値を 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 で良いと思います(小並感)