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

  • 相关阅读:
    背包问题
    基本TCP套接字编程
    P中值选址问题的整数规划求解
    Leapms + cplex解决 混合整数规划问题
    如何用整数规划求解NP完全问题
    用Leapms建摸 / 用 CPLEX 求解 旅行商问题 整数规划问题
    用线性规划建模(确定参数)关键路径法
    流水车间调度算法分析的简单+Leapms实践--混合整数规划的启发式建模
    Wolsey "强整数规划“ 建模的+Leapms实践——无产能批量问题
    Wolsey“强整数规划模型”经典案例之一单源固定费用网络流问题
  • 原文地址:https://www.cnblogs.com/110-913-1025/p/11843028.html
Copyright © 2020-2023  润新知