升阶和降阶操作
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