如何创建仅接收一次信号的ReactiveCocoa订阅者,然后取消订阅/释放自身?

时间:2013-03-25 12:40:45

标签: ios objective-c reactive-programming reactive-cocoa

我目前正在向这样的房产信号注册订户:

[RACAble(self.test) subscribeNext:^(id x) {
        NSLog(@"signal fired!");
 }];

默认功能是它每次都会自动触发self.test被更改,但我只想要触发一次,然后取消订阅。在创建此订阅者时,是否存在可以传递给RAC的“一次”参数或修饰符?

4 个答案:

答案 0 :(得分:31)

[[RACAble(self.test) take:1] subscribeNext:^(id x) {
    NSLog(@"signal fired!");
}];

答案 1 :(得分:0)

特别是在创建嵌套订阅时,这可能会有所帮助:

RACDisposable *subscription = [RACObserve(self, test) subscribeNext:^(id x) {
         NSLog(@"signal fired!");
}];
[subscription dispose];

答案 2 :(得分:0)

kamil3 answer的小修正:

__block RACDisposable *subscription = [RACObserve(self, test) subscribeNext:^(id x) {
    [subscription dispose];
    NSLog(@"signal fired!");
}];

答案 3 :(得分:-1)

你也可以这样做(如果你不是整个简洁的事情):

[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber){
   RACDisposable *inner_disposer = [RACAble(self.test) subscribeNext:^(id x){
      [subscriber sendNext:x];
      [subscriber sendComplete];
   }];
   return [RACDisposable disposableWithBlock:^{
      [inner_disposer dispose];
   }];
}];