0
点赞
收藏
分享

微信扫一扫

iOS RAC探索之(使用篇)

奋斗De奶爸 2021-09-19 阅读 42
日记本

介绍

1.ReactiveObjC github
2.ReactiveObjC(正式称为ReactiveCocoaRAC)是一个Objective-C框架,采用了函数式+响应式的编程思想。
3.RAC里面万物皆信号,对kvo、代理、通知、tagert、timer进行了封装。是我们的代码看上去更加紧凑。使用起来也更加方便
4.由于RAC可阅读性比较差,对于不太熟悉的人学习起来可能需要一定成本,所以团队协作开发在使用时需要谨慎考虑。
5.这篇文章只是对RAC的使用场景做一个介绍,不对里面的实现原理做深入研究

使用场景

首先导入#import <ReactiveObjC.h>

通知

1.以前我们写注册完通知后,还需要写一个接受的方法,还需要在delloc removeObserver里面,但是使用RAC后,只需要一行代码就搞定

    //通知
    [[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillShowNotification object:nil]subscribeNext:^(NSNotification * _Nullable x) {
            NSLog(@"键盘信息:%@",x.userInfo);
    }];

KVO

以前我们监听属性,可能需要调用三个方法,并且方法还很分散

[self.name addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:NULL];

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
    
}

- (void)dealloc{
    [self removeObserver:self forKeyPath:@"name"];
}

使用RAC后

    
    [RACObserve(self, name) subscribeNext:^(id  _Nullable x) {
        
    }];
    或者
    [[self.name rac_valuesForKeyPath:@"name" observer:self] subscribeNext:^(id  _Nullable x) {
    
    }];

代理

    self.textField.delegate = self;
    [[self rac_signalForSelector:@selector(textFieldDidBeginEditing:) fromProtocol:@protocol(UITextFieldDelegate)] subscribeNext:^(RACTuple * _Nullable x) {
  //RACTuple 可以获取参数
   UITextField *txt = (UITextField *)x.first;
       
    }];

taget (UI)

//UIButton
    [[self.button rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) {
        
    }];
  
    [[self.textField rac_signalForControlEvents:UIControlEventEditingChanged] subscribeNext:^(__kindof UIControl * _Nullable x) {
        
        UITextField *txt = (UITextField *)x;
        NSLog(@"%@",txt.text);
    }];
举报

相关推荐

0 条评论