3

ReactiveCocoa を使用して、繰り返しシグナルからシグナルをチェーンするにはどうすればよいですか?

私は次のようなことをしたいと思います: 5 秒ごとに、ネットワーク リクエストを実行します。

この目的のために、繰り返し信号を作成しました

RACSignal *each5SecondSignal = [[[RACSignal interval:5 onScheduler:[RACScheduler mainThreadScheduler]] take:1] concat:[RACSignal 5 onScheduler:[RACScheduler mainThreadScheduler]]];

およびデータを取得するための信号

RACSignal* iframeSignal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {....

しかし、それらを連鎖させる方法がわかりません。これが私の試みです(「then」メソッドを使用)。

//This doesn't work, the log do not appear
[[each5SecondSignal then:^RACSignal *{
   return iframeSignal;
 }] subscribeNext:^(id x) {
   NSLog(@"Request was made");
 }];

ただし、[iframeSignal subscribeNext...]信号の内容が呼び出されると、実行すると

//OK is logged every 5 seconds
[each5SecondSignal subscribeNext:^(id x) {
    NSLog(@"OK");
  }];

ログは期待どおりに表示されます。

私たちを手伝ってくれますか?

心から

ジェリー

4

1 に答える 1

3

まず第一に、 はeach5SecondSignalはるかに簡単です。信号は 5 秒後に完了するため、電話する必要はありませんtake:。私があなたのことを正しく理解していれば、信号を永遠に続けてほしいと思っています。

RACSignal *each5SecondSignal = [RACSignal interval:5 onScheduler:[RACScheduler mainThreadScheduler]]

そして、次の値を送信するたびに呼び出されるflattenMap:ように使用できます(これは5秒ごとに発生します):iframeSignaleach5SecondSignal

[[each5SecondSignal flattenMap:^RACStream *(id value) {
   return iframeSignal;
 }] subscribeNext:^(id x) {
   NSLog(@"Request was made");
 }];
于 2015-02-26T21:45:17.433 に答える