核心代码

 // 创建第一个信号
        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