1.替代Target Action模式
self.myBtn.rac_command = [[RACCommand alloc]initWithSignalBlock:^(UIButton *btn) {
NSLog(@"点击了%@" , btn.titleLabel.text);
return [RACSignal empty];
}];
[[self.textFild rac_textSignal] subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
[[self.textFild rac_signalForControlEvents:UIControlEventEditingChanged] subscribeNext:^(id x){
NSLog(@"change");
}];
2.替代代理模式--只能替代无返回值的代理
RACSignal *signal = [self rac_signalForSelector:@selector(cleanRoomWith:) fromProtocol:@protocol(MyDelegate)];
[signal subscribeNext:^(RACTuple* x) {
//传过来的元祖中安顺序存放着回调函数的参数
NSLog(@"%@" , x[0]);
}];
3.替代KVO模式
RACObserve--创建一个新的RACSignal信号对象,当self的value变化时,发送信号到订阅者并发送新的value值,并调用subscribeNext的block
*/
@weakify(self);
[RACObserve(self , value) subscribeNext:^(id _Nullable x) {
@strongify(self);
NSLog(@"你变了--%@" , x);
}];
self.value = 10;
self.value = 20;
4.替代系统广播
[[NSNotificationCenter.defaultCenter rac_addObserverForName:@"123" object:nil]subscribeNext:^(NSNotification * _Nullable x) {
NSLog(@"%@" , x.userInfo);
}];
[NSNotificationCenter.defaultCenter postNotificationName:@"123" object:nil userInfo:@{@"name":@"jim" , @"age":@"12"}];
还有更多相关用法,参考demo https://github.com/liulangzhiwang2013/RACTest