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的时候默认显示的值)

  • 相关阅读:
    在Ubuntu中通过update-alternatives切换软件版本
    SCons: 替代 make 和 makefile 及 javac 的极好用的c、c++、java 构建工具
    mongodb 的使用
    利用grub从ubuntu找回windows启动项
    How to Repair GRUB2 When Ubuntu Won’t Boot
    Redis vs Mongo vs mysql
    java script 的工具
    python 的弹框
    how to use greendao in android studio
    python yield的终极解释
  • 原文地址:https://www.cnblogs.com/110-913-1025/p/11843028.html
Copyright © 2011-2022 走看看