2013-03-25 1 views
17

я в настоящее время регистрации абонента по сигналу собственности, как это:Как создать абонент ReactiveCocoa, который получает сигнал только один раз, а затем отписывает/освобождает себя?

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

функциональности по умолчанию является то, что она срабатывает каждый раз, когда self.test меняется, но я просто хочу, чтобы стрелять один раз, а затем отказаться от подписки. Есть ли один аргумент или модификатор, который я могу передать RAC при создании этого подписчика?

ответ

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

спасибо , это побудило меня реорганизовать пару методов генерации сигналов во что-то более разумное. – Jon

-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]; 
    }]; 
}]; 
+2

Нет причин использовать это над 'take: 1', и он может вводить тонкие ошибки (например, цикл сохранения на' self'). –

0

Это может быть полезно, особенно при создании вложенных подписок:

RACDisposable *subscription = [RACObserve(self, test) subscribeNext:^(id x) { 
     NSLog(@"signal fired!"); 
}]; 
[subscription dispose]; 
Смежные вопросы