RAC入门学习

RAC - RACSubject

2018-08-12  本文已影响8人  南山青稞酒
```
 // RACSubject 使用    
// 创建信号
    [RACSubject subject] 跟RACSignal不一样 创建信号时没有bloc
// 订阅信号
 - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock
// 发送信号
 sendNext:(id)value
 

RACSubject: 底层实现的RACSignal不一样

-  调用subsrcibeNexrt订阅信号 只是把订阅者保存起来 并且订阅者的nextBlock已经赋值了
-  调用sendNext发送信号 , 遍历刚刚保存的多有订阅者,一个一个调用订阅者的nexrBolck

```


```
 1. 创建信号

RACSubject * subject = [RACSubject subject];

[subject subscribeNext:^(id  _Nullable x) {
   //block 调用时刻: 当信号发出新值 就会调动
    NSLog(@"第一个订阅者 调用");
}];

[subject subscribeNext:^(id  _Nullable x) {
   //多次订阅 也会调用
    NSLog(@"第二个订阅者 调用");
}];


[subject sendNext:@1];
```
  /**
    RACReplaySubject 使用步骤:
    
    -  创建信号 [RACSubject subject] , 跟RACSignal 不一样 创建的时候没有block
    
    - 可以先订阅信号 也可以先发送信号
    
    - 订阅信号 - (RACDisposable *) subcribeNext:()
    
    */
    
    
    /**
     RACReplysubject底层实现和RACSubject不一样
     
        -  调用sendNext发送信号,把值保存起来,然后便利刚刚所有保存起来的所有订阅者,一个一个调用订阅者的nextBlock
        -  调用subscribeNext订阅信号,遍历保存的所有值,一个一个调用订阅者的nextBlock
          如果当一个信号被订阅,就重复播放之前所有值,需要先发送信号,在订阅信号;也就是先保存值,在订阅信号
     */
    
    RACReplaySubject * repleySubject =[RACReplaySubject subject];
    
    [repleySubject sendNext:@1];
    
    [repleySubject sendNext:@2];
    
    [repleySubject subscribeNext:^(id  _Nullable x) {
     
        NSLog(@"第一个订阅者接收到的数据%@",x);

    }];
    
    
    [repleySubject subscribeNext:^(id  _Nullable x) {
        
        NSLog(@"第二个订阅者接收到的数据%@",x);
        
    }];
    

上一篇 下一篇

猜你喜欢

热点阅读