zoukankan      html  css  js  c++  java
  • iOS RAC使用补充

    1  延迟执行

    [[RACScheduler mainThreadScheduler] afterDelay:10 schedule:^{
            NSLog(@"延迟执行。。");
        }];

    2  定时器  

    [[RACSignal interval:5 onScheduler:[RACScheduler mainThreadScheduler]] subscribeNext:^(NSDate * _Nullable x) {
            NSLog(@"间隔执行。");
        }];

    3 核心方法bind    

    - (void)bind{
        // 假设想监听文本框的内容,并且在每次输出结果的时候,都在文本框的内容拼接一段文字“输出:”
         
        // 方式一:在返回结果后,拼接。
        [self.textField.rac_textSignal subscribeNext:^(id x) {
     
            NSLog(@"输出:%@",x);
        }];
         
         
        // map
        [[_textField.rac_textSignal map:^id(id value) {
            // 当源信号发出,就会调用这个block,修改源信号的内容
            // 返回值:就是处理完源信号的内容。
            return [NSString stringWithFormat:@"输出:%@",value];
        }] subscribeNext:^(id x) {
     
            NSLog(@"%@",x);
        }];
         
    }

    4  concat 方法

    - (void)concat{
        RACSignal *signalA = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
             
            [subscriber sendNext:@1];
            [subscriber sendCompleted];
             
            return nil;
        }];
        RACSignal *signalB = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
             
            [subscriber sendNext:@2];
             
            return nil;
        }];
         
        // 把signalA拼接到signalB后,signalA发送完成,signalB才会被激活。
        RACSignal *concatSignal = [signalA concat:signalB];
         
        // 以后只需要面对拼接信号开发。
        // 订阅拼接的信号,不需要单独订阅signalA,signalB
        // 内部会自动订阅。
        // 注意:第一个信号必须发送完成,第二个信号才会被激活
        [concatSignal subscribeNext:^(id x) {
             
            NSLog(@"%@",x);
             
        }];
        
    }

    类似的方法还有:zipWith(信号合并)     combineLatestWith(信号合并)

    5  combineLatest  和reduce  的结合使用

      使用案例

     @weakify(self)
        RACSignal *signalA = self.textField.rac_textSignal;
        RACSignal *singalB = self.passwordField.rac_textSignal;
        [[RACSignal combineLatest:@[signalA,singalB] reduce:^id(NSString *account,NSString *password){
            return @(account.length > 0 && password.length > 0);
        }] subscribeNext:^(NSNumber  *x) {
            @strongify(self)
            NSLog(@"subscribeNext %@",x);
            self.button.enabled = x.integerValue;
        }];

    6  双向绑定

       声明一个属性

    @property (nonatomic , copy) NSString *name;

       创建一个label

      UILabel *myL = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 50)];
        myL.textColor = [UIColor lightGrayColor];
        [self.view addSubview:myL];
    

     实现绑定

    RACChannelTo(myL,text,@"") = RACChannelTo(self,name); //双向绑定

    这种绑定是双向的。左边的值改了右边的值也会一起改。同理右边的改了左边的也会同步修改。

    RACChannelTo  中的三个参数1:对象   2:属性值   3:默认值(为null的时候默认显示的值)

  • 相关阅读:
    struts2 的特征
    The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory
    web.xml 404 500 配置
    重大发现 springmvc Controller 高级接收参数用法
    struts2 file
    struts2-core-2.3.20.jar
    系统设计工具
    Java基础
    IAM
    秒杀系统
  • 原文地址:https://www.cnblogs.com/110-913-1025/p/11843028.html
Copyright © 2011-2022 走看看