美文网首页Objective-C
信号的高阶操作

信号的高阶操作

作者: Jimmy_L_Wang | 来源:发表于2019-07-02 23:17 被阅读0次

升阶和降阶操作

image.png

创建于订阅高阶信号

  RACSignal *signal = [RACSignal return:@[@1,@2,@3,@4]];
    
    //创建高阶信号
    RACSignal *highOrderSignal = [RACSignal return:signal];
    RACSignal *anotherSignal = [signal map:^id _Nullable(id  _Nullable value) {
        return [RACSignal return:value];
    }];
    
    //订阅高阶信号
    [highOrderSignal subscribeNext:^(RACSignal *  _Nullable aSignal) {
        [aSignal subscribeNext:^(id  _Nullable x) {
            
        }];
    }];

降阶操作 -- SwitchToLatests

降阶操作.png

实例

image.png image.png

降阶操作 If/then/else

image.png

If/then/else 本质&类似操作

image.png

降阶操作 - Flatten

image.png image.png image.png image.png image.png image.png image.png

FlattenMap的重要性

  • 可以用FlattenMap实现很多的信号转换
  • 支持串行异步操作(类似Promise)
  • 满足Monad 部分定义(bind和return才完全满足)
image.png image.png image.png

FlattenMap与Monad、bind

  • Functor、Applicative、Monad概念
  • FlattenMap符合Monad的bind定义,但是...
    • 无法实现takeUntil:操作
    • 无法做副作用操作例如take:的技术
image.png image.png image.png

有用的高阶操作

image.png

相关文章

网友评论

    本文标题:信号的高阶操作

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