常用的第三方复制粘贴ReactiveCocoa相关

ReactiveCocoa(FRP)-进阶篇

2016-11-13  本文已影响626人  IIronMan
flattenMap Map简单使用 signalOfsignals(*信号中的信号*)用FlatternMap** 信号中的信号创建订阅者的3种方式
// 1.创建信号中的信号
RACSubject *signalOfsignals = [RACSubject subject];
RACSubject *signal = [RACSubject subject];

//2.创建订阅者的种方式

   //第1种方式
[signalOfsignals.switchToLatest subscribeNext:^(id x) {
    
    
    NSLog(@"%@",x);
}];

// 第2种方式
[signalOfsignals subscribeNext:^(RACSignal *x) {
    
    [x subscribeNext:^(id x) {
        
        NSLog(@"%@",x);
        
    }];
    
}];

 // 第3种方式
[[signalOfsignals flattenMap:^RACStream *(id value) {
    
    // 当signalOfsignals的signals发出信号才会调用
    
    return value;
    
}] subscribeNext:^(id x) {
    
    // 只有signalOfsignals的signal发出信号才会调用,因为内部订阅了bindBlock中返回的信号,也就是flattenMap返回的信号。
    // 也就是flattenMap返回的信号发出内容,才会调用。
    
    //5.打印信号发送的内容(可以进行修改)
    
    NSLog(@"%@aaa",x);
}];

// 3.信号的信号发送信号
[signalOfsignals sendNext:signal];

// 4.信号发送内容
[signal sendNext:@1];
zipWith
底层实现:
  - 1.定义压缩信号,内部就会自动订阅signalA,signalB
  - 2.每当signalA或者signalB发出信号,就会判断signalA,signalB有没有发出个信号,有就会把最近发出的信号都包装成元组发出。
interval retry重试 replay重放

RACSignal *signal = [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {

         [subscriber sendNext:@1];
         [subscriber sendNext:@2];
    
         return nil;
     }] replay];

     [signal subscribeNext:^(id x) {
    
          NSLog(@"第一个订阅者%@",x);
    
     }];

    [signal subscribeNext:^(id x) {
    
         NSLog(@"第二个订阅者%@",x);
    
     }];
上一篇 下一篇

猜你喜欢

热点阅读