美文网首页
RACSignal的基本方法说明

RACSignal的基本方法说明

作者: Bepawbikvy | 来源:发表于2019-05-14 15:32 被阅读0次
    1、RACSignal的创建:
    // 1_1、创建信号 + (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe
    // 1_2、订阅信号,才会激活信号. - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock
    // 1_3、发送信号 - (void)sendNext:(id)value
    
    // 1.创建信号
    RACSignal *siganl = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        
        // block调用时刻:每当有订阅者订阅信号,就会调用block。
        
        // 2.发送信号
        [subscriber sendNext:@1];
        
        // 如果不在发送数据,最好发送信号完成,内部会自动调用[RACDisposable disposable]取消订阅信号。
        [subscriber sendCompleted];
        
        return [RACDisposable disposableWithBlock:^{
            
            // block调用时刻:当信号发送完成或者发送错误,就会自动执行这个block,取消订阅信号。
            
            // 执行完Block后,当前信号就不在被订阅了。
            
            NSLog(@"信号被销毁");
            
        }];
    }];
    
    // 3.订阅信号,才会激活信号.
    [siganl subscribeNext:^(id x) {
        // block调用时刻:每当有信号发出数据,就会调用block.
        NSLog(@"接收到数据:%@",x);
    }];
    

    RACSignal底层实现:
    // 1.创建信号,首先把didSubscribe保存到信号中,还不会触发。
    // 2.当信号被订阅,也就是调用signal的subscribeNext:nextBlock
    // 2.2 subscribeNext内部会创建订阅者subscriber,并且把nextBlock保存到subscriber中。
    // 2.1 subscribeNext内部会调用siganl的didSubscribe
    // 3.siganl的didSubscribe中调用[subscriber sendNext:@1];
    // 3.1 sendNext底层其实就是执行subscriber的nextBlock

    2、信号的处理
    2_1、subscribeNext,将事件流传递给下一个subscriber。
    2_2、filter,用来做一些条件判断、筛选。返回值是BOOL。
    2_3、map,用来转化事件数据类型,比如NSString转成NSNumber。
    2_4、RAC(self.passwordTextField, backgroundColor),绑定属性作为数据的返回类型。
    2_5、combineLatest,合并多个信号,combineLatest:@[self.phoneNameRegexSig,self.passwordRegexSig]。
    2_6、rac_signalForControlEvents,绑定控制事件,用于UIButton等。
    2_7、createSignal,创建信号。
    2_8、flattenMap,简化了一步操作,本来是信号A转成信号B调用subscribeNext,B变成了subscribeNext的x;使用flattenMap后,B里面的事件流直接传给了x。
    2_9、doNext,事件发生时处理的逻辑,放在rac_signalForControlEvents之后。
    2_10、RACDisposable,手动移除事件流。
    2_11、then,等待网络时间处理回调,有效地将控制从一个信号传递给下一个。传递error事件。
    2_12、deliverOn:[RACScheduler mainThreadScheduler]]转到主线程。
    2_13、RACScheduler *scheduler subscribeOn:scheduler异步调用。
    2_14、throttle间隔操作,间隔几秒后执行信号。
    
    3、注意事项
    3_1、使用@weakify(self)避免循环引用和使用@strongify(self)保存住self对象。
    3_2、信号创建之后,需要使用subscribeNext传递事件流,才能使代码执行。

    相关文章

      网友评论

          本文标题:RACSignal的基本方法说明

          本文链接:https://www.haomeiwen.com/subject/eawsaqtx.html