1、 信号量的合并CombineLatest
信号量的合并说白了就是把两个水管中的水合成一个水管中的水。但这个合并有个限制,当两个水管中都有水的时候才合并。如果一个水管中有水,另一个水管中没有水,那么有水的水管会等到无水的水管中来水了,在与这个水管中的水按规则进行合并。下面这个实例就是把两个信号量进行合并
-
首先创建两个自定义的信号量letters和numbers
-
把两个信号量通过combineLatest函数进行合并,combineLatest说明要合并信号量中最后发送的值
-
reduce块中是合并规则:把numbers中的值拼接到letters信号量中的值后边。
-
经过上面的步骤就是创建所需的相关信号量,也就是相当于架好运输的管道。接着我们就可以通过sendNext方法来往信号量中发送值了,也就是往管道中进行灌水
- (void) combiningLatest{
RACSubject *letters = [RACSubject subject];
RACSubject *numbers = [RACSubject subject];
[[RACSignal
combineLatest:@[letters,numbers]
reduce:^(NSString*letter,NSString *number){
return [letter stringByAppendingString:number];
}]
subscribeNext:^(NSString*x) {
NSLog(@"%@", x);
}];
// 输出结果B1 C1 C2
[letters sendNext:@"A"];
[letters sendNext:@"B"];
[numbers sendNext:@"1"];
[letters sendNext:@"C"];
[numbers sendNext:@"2"];
}
网友评论