核心代码
// 创建第一个信号
RACSignal *signal1 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@"信号 1 的值"];
[subscriber sendCompleted];
return nil;
}];
// 创建第二个信号
RACSignal *signal2 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@"信号 2 的值"];
[subscriber sendCompleted];
return nil;
}];
// 使用 zip 合并信号
RACSignal *zippedSignal = [signal1 merge:signal2];
[zippedSignal subscribeNext:^(RACTuple *tuple) {
NSLog(@"接收到: %@", tuple);
} error:^(NSError * _Nullable error) {
NSLog(@"错误: %@", error);
} completed:^{
NSLog(@"所有信号都已完成.");
}];
1、创建信号量
1、调用RACDynamicSignal 类方法创建信号
2、 拷贝订阅block到当前的属性中
3、给信号设置(流)名字
2、合并信号量
1、调用颞部的合并方法
2、遍历数组,然后执行里面的block【block的执行有保存作用,后面调用到的时候在调用】
3、 flattern中合并的 ,使用了bind: 修改了信号,成为了一个新的信号
3、订阅信号量
1、创建一个RACSubscriber对象(里面就是拷贝有关的block到对象属性中)
2、初始化一个RACPassthroughSubscriber 对象,
3、不为空,就调度执行订阅,调用schedule方法,执行里面的block
4、self.didSubscribe(subscriber) ,这个就是上面我们创建信号的时候保留的block
Last updated