信号的高阶操作

升阶和降阶操作

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容