zoukankan      html  css  js  c++  java
  • ReactiveCocoa使用详解

    ReactiveCocoa是基于响应式编程的实践,使用起来很方便,下面将讲解详细使用。

    1.监听对象的成员变量变化,当成员变量值被改变时,触发做一些事情.

    A)普通属性

      @property(nonatomic,copy) NSString *changeinput;

     [RACObserve(self, changeinput)  subscribeNext:^(id x) {

             NSLog(@"成员变量 changeinput 被修改成了:%@", x);

        }];

    当在其他地方修改了changeinput的属性值,将会调用。

    B)如何监听控件的值变化,

     [[self.textfiled.rac_textSignal

          filter:^(NSString *str) {

              if (str.integerValue > 30) {

                  return YES;

              } else {

                  return NO;

              }

          }]

         subscribeNext:^(NSString *str) {

              NSLog(@"textfield 控件变化了:%@",str);

         }];

    2. 属性绑定,转换数据流

      A)

       //直接绑定

     

        RAC(self.loginButton,enabled) =  RACObserve(self,isCanLogin);;

     //需要转换数据流,让输入和alpha绑定,当输入为12时,透明度为1.0 否则是0.5

     

        RACSignal *changeSignal =  RACObserve(self,changeinput);

     

        RAC(self.loginButton, alpha) = [changeSignal

     

                                     map:^id(NSString *str) {

     

                                         return [str isEqualToString:@"12"] ? @1.0 : @0.5;

     

                                     }];

     

    B)两个输入,按钮之间的绑定关系,当输入长度大于5时,按钮可点击

     

      RACSignal *validUsernameSignal = [self.textfiled.rac_textSignal map:^id(NSString *text) {

            return @(text.length >5);

        }];

        RACSignal *validPasswordSignal = [self.passwordTextfield.rac_textSignal map:^id(NSString *text) {

            return @(text.length >5);

        }];

        RACSignal *signUpActiveSignal = [RACSignal combineLatest:@[validUsernameSignal, validPasswordSignal]

                                                          reduce:^id(NSNumber *usernameValid, NSNumber *passwordValid){

                                                              return @([usernameValid boolValue] && [passwordValid boolValue]);

                                                          }];

        

        [signUpActiveSignal subscribeNext:^(NSNumber *signupActive) {

            self.loginButton.enabled = [signupActive boolValue];

        }];

    3.两个控件之间的绑定关系,如输入框输入,label显示输入结果

       RAC(self.outputLabel,text) =  self.textfiled.rac_textSignal;

      或者也可以和一个属性值绑定,当changeinput改变时,outputLabel也会发生改变,

      RAC(self.outputLabel, text) = RACObserve(self, changeinput);

     

      4.事件监听

    - (void)eventListener{

        RACSignal *buttonSignal = [self.signalButton rac_signalForControlEvents:UIControlEventTouchUpInside];

        [buttonSignal subscribeNext:^(id x) {

            NSLog(@"buttonSignal %@",buttonSignal);

        }];

        RACSignal *textChange = [self.passwordTextfield rac_textSignal];

        [textChange  subscribeNext:^(NSString *textfield)

         {

             NSLog(@"textfield %@", textfield);

          }];

         RACSignal *viewAppeared = [self rac_signalForSelector:@selector(viewDidAppear:)];

        [viewAppeared subscribeNext:^(id x) {

            NSLog(@"viewDidAppear %@", x);

        }];

    }

    5.其它的一些用法

    如,

    A)添加观察者

         [[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"MyNotification" object:nil] subscribeNext:^(NSNotification *notification) {

            NSLog(@"Notification Received");

        }];

    B)object的dealloc被触发时,执行的一段代码,这样很方便吧

      NSArray *array = @[@"foo"]; 

         [[array rac_willDeallocSignal] subscribeCompleted:^

      {

      NSLog(@"will dealloc"); 

        }]; 

        array = nil; 

        



  • 相关阅读:
    spark学习
    推荐系统-摘录
    matplotlib安装问题解决
    秒杀系统分析
    大数据常用启动命令
    推荐系统简介
    java面试-JVM内存结构
    推荐算法-基于内容的推荐
    推荐算法-基于模型的协同过滤
    监督学习之模型评估与选择
  • 原文地址:https://www.cnblogs.com/menchao/p/5502681.html
Copyright © 2011-2022 走看看