RAC基础

2018-10-07  本文已影响0人  开发界小学生

获得信号的方式

1.Cocoa桥接

    UIView * view;
    UIButton * view1;
    RACSignal * sig = [view rac_signalForSelector:@selector(setFrame:)];
    RACSignal * sig1 = [view1 rac_signalForControlEvents:UIControlEventTouchUpInside];
    RACSignal * sig2 = RACObserve(view, backgroundColor);

2.信号变换

    RACSignal *signal3 = [sig map:^id _Nullable(NSString * value) {
            return [value substringFromIndex:1];
     }];

3.序列转换
RACSignal * sig4 = [RACSequence new].signal;

订阅信号的基本方式

1.订阅

     [sig subscribeNext:^(id  _Nullable x) {
        
      } error:^(NSError * _Nullable error) {
        
      } completed:^{
        
      }];

2.绑定

      RAC(view, backgroundColor) = sig;
3.Cocoa桥接
       [view rac_liftSelector:@selector(convertRect:toView:) withSignals:sig,sig1];
       [view rac_liftSelector:@selector(convertRect:toView:) withSignalsFromArray:@[sig,sig1]];
       [view rac_liftSelector:@selector(convertRect:toView:) withSignalOfArguments:sig1];

Rac的数量操作

1.fliter:[[self.textField.rac_textSignal filter:^BOOL(NSString * _Nullable value) {
              NSLog(@"%@",value);
              return [value length] > 5;
            }] subscribeNext:^(NSString * _Nullable x) {
                NSLog(@"%@", x);
             }];
2.take:RACSignal *sigD = [sigA take:1];
3.skip: RACSignal *sigD = [sigA skip:1];
4.startWith:RACSignal *sigD = [sigA startWith:@1];
5.repeat:RACSignal *sigD = [sigA repeat];
6.Retry:RACSignal *sigD = [sigA retry:2];

Rac时间操作

 1.delay:RACSignal *sigD = [sigA delay:1];
              RACSignal * interval = [[[RACSignal return:@"1"] delay:1] repeat];
              [interval subscribeNext:^(id  _Nullable x) {
                    NSLog(@"%@",x);
                }];

2.Throttle:RACSignal * interval = [[RACSignal return:@"1"] throttle:2];
                  [interval subscribeNext:^(id  _Nullable x) {
                  NSLog(@"%@",x);
                }];  
              解释:每两秒以最后一个值为节点。推迟两秒订阅新值

Rac多个信号的组合

  1.Concat: RACSignal * conSig = [sigB concat:sigA];
  2.RACSignal * sigmer = [sigA merge:sigB];
    RACSignal * sigmer = [RACSignal merge:@[sigA,sigB]];
    RACSignal * sigmer = [RACSignal merge:RACTuplePack_(sigA,sigB)];
![4A93B471-3781-4DBA-B1E5-192117107C4D.png](https://img.haomeiwen.com/i9717104/4ac310260c432cfa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
3.zip:RACSignal * sig1= [[self rac_signalForSelector:@selector(viewWillAppear:)] mapReplace:@"我是出现"];
    RACSignal * sig2 = [[self rac_signalForSelector:@selector(viewWillDisappear:)] mapReplace:@"我是销毁"];
    RACSignal * sig3 = [sig1 zipWith:sig2];

解释:希望同时获取两个新号。不分顺序

上一篇 下一篇

猜你喜欢

热点阅读