Posted at

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

More than 5 years have passed since last update.

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