06RAC--RACCommand

2018-05-22  本文已影响6人  myk
几种用法
- (void)test1 {
    // RACCommand: 处理事件
    // 不能返回空的信号
    // 1.创建命令
    RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
        //block调用,执行命令的时候就会调用
        NSLog(@"input=%@",input); // input 为执行命令传进来的参数  
        // 这里的返回值不允许为nil
        return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
            [subscriber sendNext:@"执行命令产生的数据"];
            return nil;
        }];
    }];
    // 如何拿到执行命令中产生的数据呢?
    // 订阅命令内部的信号
    // ** 方式一:直接订阅执行命令返回的信号
    // 2.执行命令  返回一个RACSignal
    RACSignal *signal =[command execute:@2]; // 这里其实用到的是replaySubject 可以先发送命令再订阅
    // 在这里就可以订阅信号了
    [signal subscribeNext:^(id x) {
        NSLog(@"x=%@",x);
    }];
}
打印结果:input=2    x=执行命令产生的数据
RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
        NSLog(@"input === %@", input);
        return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
            [subscriber sendNext:@"333"];
            [subscriber sendCompleted];
            return [RACDisposable disposableWithBlock:^{
                NSLog(@"销毁了");
            }];
        }];
    }];
    //executionSignals:信号源,信号中信号,signalofsignals:信号,发送数据就是信号
    [command.executionSignals subscribeNext:^(id x) {
        //x=== RACDynamicSignal 信号
        NSLog(@"x1=== %@", x);
        [x subscribeNext:^(id x) {
            //x 发送的信息
            NSLog(@"x2=== %@", x);
        }];
    }];
    //执行命令
    [command execute:@2];
RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
        NSLog(@"input === %@", input);
        return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
            [subscriber sendNext:@"333"];
            [subscriber sendCompleted];
            return [RACDisposable disposableWithBlock:^{
                NSLog(@"销毁了");
            }];
        }];
    }];
    //switchToLatest获取最新发送的信号,只能用于信号中信号。
    [command.executionSignals.switchToLatest subscribeNext:^(id x) {
        //x现在是  发送的信息
        NSLog(@"x===%@",x);
    }];
    [command execute:@2];
RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
        NSLog(@"input === %@", input);
        return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
            [subscriber sendNext:@"333"];
            [subscriber sendCompleted];
            return [RACDisposable disposableWithBlock:^{
                NSLog(@"销毁了");
            }];
        }];
    }];
    //command.executing:监听事件有没有完成
    [command.executing subscribeNext:^(id x) {
        NSLog(@"x === %@", x);
    }];
    [command execute:@2];
RAC的宏定义
//两种写法
RAC(self.label, text) = self.textField.rac_textSignal;
[self.textField.rac_textSignal subscribeNext:^(id x) {
     self.label.text = x;
}];

 RAC(self.label, text) = self.textField.rac_textSignal;
//监听self.label的text属性
 [RACObserve(self.label, text) subscribeNext:^(id x) {
     NSLog(@"====label的文字变了");
 }];
上一篇 下一篇

猜你喜欢

热点阅读