RAC使用笔记一

2017-11-21  本文已影响0人  Corbin___

// 属性绑定
1.RAC(TARGET, [KEYPATH, [NIL_VALUE]])
1.1.TARGET 属性持有者
1.2.[NIL_VALUE] 属性
// self.outputLabel.text 的值跟self.inputTextField.rac_textSignal绑定
RAC(self.outputLabel, text) = self.inputTextField.rac_textSignal;


// KVO 观察 TARGET中属性KEYPATH变化
RACObserve(TARGET, KEYPATH)
// 用法
// UILabel与Model绑定,这样name的值改变,对应的 label也是改变
RAC(self.outputLabel, text) = RACObserve(self.model, name);

 // rac_sequence 把数组转换成RACSequence 对象
    // rac_sequence.signal 将RACSequence转换成RACSignal信号类
    RACSignal *signal = @[ @1,@2,@3 ].rac_sequence.signal ;
    signal = [signal filter:^BOOL(NSNumber *value) {
        // filter 是 yes 的时候,才会流出来
        return value.integerValue % 2;
    }];
    [signal subscribeNext:^(NSNumber *x) {
        NSLog(@"%@",x);
    }];

结果:
2017-12-04 10:49:56.506564+0800 test[5596:44442] 1
2017-12-04 10:49:56.507729+0800 test[5596:44442] 3
// 拦截信号的内容,返回自己再加修改的内容

    self.btn = [[UIButton alloc] initWithFrame:CGRectMake(80, 80, 80, 80)];
    [self.btn setBackgroundColor:[UIColor redColor]];
    [self.view addSubview:self.btn];
    for (int i=0; i<10; i++) {
        [self.btn rac_signalForControlEvents:UIControlEventTouchUpInside]  subscribeNext:^(UIButton *x) {
            NSLog(@"%@",x);
        }];
    }
// 这个代码,会注册多个监听信号,当点击按钮的时候,会同时发送这么多个信号,这个结果不是我们想要的,一般是点击就响应一次就可以了

#warning 解决方案
// 设法让这个所在的方法,调一次,走一次,避免调一次方法,注册多次信号
        [self.btn rac_signalForControlEvents:UIControlEventTouchUpInside]  subscribeNext:^(UIButton *x) {
            NSLog(@"%@",x);
        }];
// how to do
       @property (nonatomic, strong) RACDisposable *flag;

       if(!self.flag) {  // 走过一次下面的代码,self.flag就不是nil了,就不会多次注册信号了
              self.flag =  [self.btn rac_signalForControlEvents:UIControlEventTouchUpInside]  
        subscribeNext:^(UIButton *x) {
              NSLog(@"%@",x);
        }];
}
上一篇 下一篇

猜你喜欢

热点阅读