Han*_*son 3 cocoa reactive-cocoa
我有三个信号,我想按顺序评估,它们之间有一秒钟的延迟.
这个片段做我想要的,但它很难看:
RACSignal *first = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
NSLog(@"First!");
[subscriber sendCompleted];
return nil;
}];
RACSignal *second = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
NSLog(@"Second!");
[subscriber sendCompleted];
return nil;
}];
RACSignal *third = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
NSLog(@"Third!");
[subscriber sendCompleted];
return nil;
}];
NSArray *signals = @[first, [[RACSignal empty] delay:1.0f],
second, [[RACSignal empty] delay:1.0f],
third];
NSLog(@"Starting");
[[[signals rac_sequence].signal concat] subscribeCompleted:^{
NSLog(@"Done!");
}];
Run Code Online (Sandbox Code Playgroud)
它打印出来:
2013-11-18 17:13:35.326 Starting
2013-11-18 17:13:35.327 First!
2013-11-18 17:13:36.328 Second!
2013-11-18 17:13:37.329 Third!
2013-11-18 17:13:37.330 Done!
Run Code Online (Sandbox Code Playgroud)
你的代码非常接近.您不需要"spacer"信号,只需将-delay:呼叫置于第一和第二信号上即可.-concat:将序列化信号的执行,使得每个后续信号仅在其先前信号完成之后才开始,并且-delay:将推迟其信号完成的传递,从而在后续信号开始工作之前提供所需的延迟.您也不需要跳入RACSequence并退出,因为-concat:可以快速枚举信号:
NSLog(@"Starting");
NSArray *signals = @[ [first delay:1.0f], [second delay:1.0f], third ];
[[RACSignal concat:signals] subscribeCompleted:^{
NSLog(@"Done!");
}];
Run Code Online (Sandbox Code Playgroud)