iOS RAC下对应的的Target Action模式、代理模式和观察者模式

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

猜你喜欢

转载自blog.csdn.net/yingbi2014/article/details/79930077
今日推荐