reactive cocoa - ReactiveCocoa finally never be called with already completed replaySubject. Is it expected behavior? -


is expected behavior?

racsubject *subject = [racreplaysubject replaysubjectwithcapacity:1]; [subject sendcompleted]; [subject finally:^{     nslog(@"never called"); }]; [subject subscribecompleted:^{     nslog(@"called"); }]; 

if so, how have finally block? need this?

void (^block)() = ^ {     nslog(@"like finally!"); }; [subject subscribeerror:^(nserror *error) {     block(); } completed:^{     block(); }]; 

edit: misunderstand finally me, the document renamed dofinished in rac 3.0 may understand, instead of the 2.x document.

it's unrelated fact signal has completed. consider this:

racsubject *subject = [racsubject subject]; [subject finally:^{     nslog(@"never called"); }]; [subject subscribecompleted:^{     nslog(@"called"); }]; [subject sendcompleted]; 

still never called! why? because finally: returns new signal; doesn't modify existing signal. new signal perform side effects whenever sends completed or error 1 of subscribers. if doesn't have subscribers, side effects never take place. let's subscribe signal finally: returns:

racsubject *subject = [racreplaysubject replaysubjectwithcapacity:1]; [subject sendcompleted]; [[subject finally:^{     nslog(@"called now!"); }] subscribecompleted:^{     nslog(@"called"); }]; 

that works, might not want. finally: doesn't inject side effects signal, injects side effects each subscription signal. following thing:

racsubject *subject = [racreplaysubject replaysubjectwithcapacity:1]; [subject sendcompleted]; racsignal *signalwithfinally = [subject finally:^{     nslog(@"finally block"); }]; [signalwithfinally subscribecompleted:^{     nslog(@"first subscriber completed"); }]; [signalwithfinally subscribecompleted:^{     nslog(@"second subscriber completed"); }]; 

will perform finally: block twice, may not want. subscribeerror:completed: may better choice use case.


Comments

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -