20180119-01-RACSignal的基础

本文介绍了ReactiveCocoa中信号的基本创建方式,包括单元信号、动态信号等,并讲解了如何通过不同方法订阅这些信号,如使用订阅方法、绑定、Cocoa桥接等。此外还涉及信号的变换和组合等内容。

一.获取一个信号的方式

  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的各类操作

单个信号的变换

转载于:https://www.cnblogs.com/it-q/p/7989652.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值