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

RACSignal

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

    //1.创建信号量
    RACSignal * rac = [[RACSignal createSignal:^RACDisposable *(id 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系列文章

你可能感兴趣的:(RAC的简单使用(常用方法))