// 属性绑定
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.signal && filter
// 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
// 拦截信号的内容,返回自己再加修改的内容
- rac_signalForControlEvents:UIControlEventTouchUpInside 造成多次点击
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);
}];
}