RAC的简单使用(常用方法)

RACSignal

可以将RACSignal创建的对象传递至其他地方接收消息

    //1.创建信号量
    RACSignal * rac = [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        
        //2.发出消息
        [subscriber sendNext:@"RAC发出的消息"];
        
        return nil;
        //需要注意的是 如果有多个订阅者 需要在这里加一个replay 否则不同订阅者收到的不是同一条消息
    }] replay];
    
    //3.订阅消息
    [rac subscribeNext:^(id x) {
        NSLog(@"打印收到的消息___%@",x);
    }];

RACSubject

可以代替代理和block进行反向传值

    TwoVC * vc = [[TwoVC alloc]init];
    
    //创建信号量
    vc.delegateSignal = [RACSubject subject];
    
    //订阅信号
    [vc.delegateSignal subscribeNext:^(id x) {
        NSLog(@"打印反向传回的信号__%@",x);
    }];
    
    //RACSubject 可以有多个订阅者接收消息
    [vc.delegateSignal subscribeNext:^(id x) {
        NSLog(@"打印第二个订阅者收到的消息__%@",x);
     }];

    [self presentViewController:vc animated:YES completion:nil];

在TwoVC中发送消息

[_delegateSignal sendNext:@"RAC反向发出的信息"];

需要注意的是 RACSubject 只能先订阅 再发送消息

RACReplaySubject

RACReplaySubject 可以解决 RACSubject 必须先订阅后发送的问题

RACReplaySubject * replaySubject = [RACReplaySubject subject];
    
    [replaySubject sendNext:@"RACReplaySubject先发送信息了,等待你的接收"];
    
    [replaySubject subscribeNext:^(id x) {
        NSLog(@"打印等待接收的信息__%@",x);
    }];

更详细的 RAC 内容推荐 Codepgq 写的RAC系列文章

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容