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