美文网首页iOS 开发 iOS Developer
小白带你使用ReactiveCocoa

小白带你使用ReactiveCocoa

作者: 木子小静 | 来源:发表于2016-10-10 14:10 被阅读148次

    网上很多官方解释,让一些新手摸不清头脑,不知如何下手,还是不知道怎么使用,什么时候用比较适合。接下来,我会从我自己刚接触rac的心情写这篇文。

    ReactionCocoa:被描述为函数响应式编程框架(FRP),就是不需要考虑调用的顺序,直接考虑结果进行什么样的操作。

    ReactionCocoa简称RAC

    RAC在开发中的使用

    1.代替代理
    2.代替KVO
    3.代替监听事件
    4.代替通知
    5.监听文本框文本的变化
    6.处理当前界面多次请求时,页面显示情况

    信号类(RACSignal),就相当于律师,律师在没有任何委托人的情况下是不会有工作的。
    订阅,相当于王宝强请律师打官司,只有宝宝请律师帮他打官司,律师才可以参与这个官司。

    默认信号是冷信号,就算值改变了也不会触发,只有订阅了这个信号才会变成热信号,值改变了才会触发。
    就相当于律师具有辩护的这种能力,如果没有人聘请(订阅),就算自己模拟了N次成功的案件也没有用,但是一旦被人订阅也就是被人聘请为辩护律师之后,才能参与其中,案件有什么变化才能告诉被订阅者,也就是宝宝,宝宝才会采取相应的措施。

    调用RACSignal的subscribeNext就可以订阅,接收到传过来的数据
    不同的信号订阅方式不同

    信号类的使用

    • RACSignal
      RACSignal使用步骤:1.创建信号,2.订阅信号,3.发送信号
       
        // 1.创建信号,冷信号
        RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
            
            // 3.发送数据
            [subscriber sendNext:@1];
            
            return nil;
        }];
    
        // 2.订阅信号,热信号
        [signal subscribeNext:^(id x) {
            // 只要订阅者调用sendNext,就会执行nextBlock
            // nextBlock调用:只要订阅者发送数据就会调用
            // nextBlock作用,处理数据,展示到ui上面
            
            // x,就是信号发送的内容
            NSLog(@"%@",x);
        }];
    
    • RACSubject
      RACSubject既可以订阅信号,又可以发送信号
        // 1.创建信号
        RACSubject *subject = [RACSubject subject];
    
        // 2.订阅信号
        [subject subscribeNext:^(id x) {
            
            NSLog(@"传进来的是%@", x);
        }];
    
        // 3.发送数据
        [subject sendNext:@1];
    
    • RACReplaySubject
        // 1.创建信号
        RACReplaySubject *subject = [RACReplaySubject subject];
    
        // 用RACReplaySubject发送数据和订阅信息可以调换位置 没有顺序要求 因为发送的内容会被保存起来,订阅信号之后回去遍历发送的内容
        // 订阅信号
        [subject subscribeNext:^(id x) {
            
            NSLog(@"传进来的是%@", x);
        }];
    
        // 发送数据
        [subject sendNext:@1];
    

    使用场景

    • RAC(TARGET,...)
      用来给某个对象的某个属性绑定信号,只要产生信号内容,就会把内容给属性赋值
        RAC(_label,text) = _textField.rac_textSignal;
    
    • RACObserve(TARGET, KEYPATH)
      只要这个对象的属性改变就会产生信号
    
        [RACObserve(self.view, frame) subscribeNext:^(id x) {
            
            NSLog(@"%@",x);
        }];
    
    • RACTuplePack
    
        // 包装元组
        RACTuple *tuple = RACTuplePack(@1,@2);
        NSLog(@"%@", tuple[0]);
    
    • RACCommand
    
        // RACCommand:处理事件
        
        // 1.创建命令
        // RACCommand不能返回一个空的信号
        RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input){
    
        return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber){
        
        }];
    }];
    
        // 2.执行命令
        [command execute:@1];
    

    使用小细节

    • 过滤器filter
      对信号传过来的结果进行筛选过滤
            [[self.textField.rac_textSignal filter:^BOOL(NSString *value) {
                
                return value.length > 3;
            }] subscribeNext:^(id x) {
                
                NSLog(@"长度大于3就输出该值----%@", x);
            }];
    

    这篇文写了很久了,一直没时间,就一直没写完,不过现在写完的这些也可以在项目中使用了,所以决定发出来

    相关文章

      网友评论

        本文标题:小白带你使用ReactiveCocoa

        本文链接:https://www.haomeiwen.com/subject/bsdpsttx.html