zoukankan      html  css  js  c++  java
  • 20180119-01-RACSignal的基础

    一.获取一个信号的方式

      1.单元信号

        RACSignal *signal1 = [RACSignal return:@"Some Value"];
        RACSignal *signal2 = [RACSignal error:[NSError errorWithDomain:NSCocoaErrorDomain code:999 userInfo:nil]];
        RACSignal *signal3 = [RACSignal empty];
        RACSignal *signal4 = [RACSignal never];

      2.动态信号

     RACSignal *signal5 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
            [subscriber sendNext:@1];
            [subscriber sendNext:@2];
            [subscriber sendCompleted];
            return [RACDisposable disposableWithBlock:^{
                NSLog(@"信号已销毁");
            }];
        }];

      3.cocoa桥接

     RACSignal *signal6 = [self.view rac_signalForSelector:@selector(setFrame:)];
     RACSignal *signal7 = [self.btn rac_signalForControlEvents:UIControlEventTouchUpInside];
     RACSignal *signal8 = [self.view rac_willDeallocSignal];
     RACSignal *singal9 = RACObserve(self.view, backgroundColor)

      4.信号变换

     RACSignal *signall10 = [signal1 map:^id _Nullable(id  _Nullable value) {
            return [value substringFromIndex:1];
        }];

      5.序列变换

    RACSequence *sequence = @[@1,@2,@3].rac_sequence;
    RACSignal *signal11 = sequence.signal;

    二.订阅一个信号的方式

      1.订阅方法

    [signal11 subscribeNext:^(id  _Nullable x) {
            NSLog(@"next value is %@",x);
        } error:^(NSError * _Nullable error) {
            NSLog(@"Ops Get some error:%@",error);
        } completed:^{
            NSLog(@"It finish success");
        }];

      2.绑定

     RAC(self.view,backgroundColor) = signal9;

      3.Cocoa桥接

    [self.view rac_liftSelector:@selector(convertPoint:toView:) withSignals:signal1,signal2, nil];
    [self.view rac_liftSelector:@selector(convertPoint:toView:) withSignalsFromArray:@[signal1,signal2]];
    [self.view rac_liftSelector:@selector(convertPoint:toView:) withSignalOfArguments:signal5];

      4.订阅过程

     RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
            [subscriber sendNext:@1];
            [subscriber sendNext:@2];
            [subscriber sendCompleted];
            return [RACDisposable disposableWithBlock:^{
                NSLog(@"信号销毁");
            }];
        }];
        
    RACDisposable *disposable = [signal subscribeNext:^(id  _Nullable x) {
            NSLog(@"next value is %@",x);
        } error:^(NSError * _Nullable error) {
            NSLog(@"Ops Get some error:%@",error);
        } completed:^{
            NSLog(@"It finish success");
        }];
    [disposable dispose];

    三.信号的变换和组合

    四.RACSignal的各类操作

    单个信号的变换

  • 相关阅读:
    BZOJ(2) 1041: [HAOI2008]圆上的整点
    BZOJ(1) 1003 [ZJOI2006]物流运输
    HDU 1285 确定比赛名次
    洛谷 P2951 [USACO09OPEN]捉迷藏Hide and Seek
    POJ 1201 Intervals
    2017 软件工程 个人作业——软件产品案例分析
    2017 软件工程 个人技术博客(α)
    在VS2017上对C++项目进行单元测试
    ASC47B borderless
    ASC47B borderless
  • 原文地址:https://www.cnblogs.com/it-q/p/7989652.html
Copyright © 2011-2022 走看看