【Objective-c】 ReactiveCocoa 框架使用

ReactiveCocoa入门教程——第一部分

ReactiveCocoa入门教程——第二部分

ReactiveCocoa进阶——RACCommand的使用

总结:

1、RACSignal 和 RACSubject 的区别

 RACSubject继承于RACSignal,所以RACSubject也是信号类型,使用场景有所区分
 RACSignal:"一个方法,多个值"
 RACSubject:"一个值,多个方法"
    /*
        创建信号,block 的返回值 
        1-- 返回一个RACDisposable 对象,允许在一个订阅被取消时执行一些
            清理工作
        2-- 返回 nil 表示不清理信号
     */
    
    /* ======================== RACSignal ======================= */

    //1.0 创建信号
    RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id subscriber) {
        
        //2.0 发送信号
        [subscriber sendNext:@(1)];
        [subscriber sendNext:@(2)];
        
        [subscriber sendCompleted];
        
        return [RACDisposable disposableWithBlock:^{
            NSLog(@"信号被销毁");
        }];
    }];
    
    //3.0 订阅信号,才会激活信号
    [signal subscribeNext:^(id x) {
        //block 调用时刻: 每当有信号发出数据,就会调用block
        NSLog(@"RACSignal 接收到数据:%@",x);
    }];
    
    [signal subscribeNext:^(id x) {
        //block 调用时刻: 每当有信号发出数据,就会调用block
        NSLog(@"RACSignal 接收到数据:%@",x);
    }];
    
    /* ======================== RACSubject ======================= */
    
    
    //1.0 创建信号
    RACSubject *subject = [RACSubject subject];
    
    //2.0 订阅信号
    [subject subscribeNext:^(id x) {
        NSLog(@"RACSubject 收到信号1:%@",x);
    }];
    
    [subject subscribeNext:^(id x) {
        NSLog(@"RACSubject 收到消息2:%@",x);
    }];

    //3.0 发送信号
    [subject sendNext:@(1)];
    [subject sendNext:@(2)];

输出结果:


【Objective-c】 ReactiveCocoa 框架使用_第1张图片
image.png

2、RACSubject常常用来代替delegate

你可能感兴趣的:(【Objective-c】 ReactiveCocoa 框架使用)