美文网首页
RAC单个信号的变换

RAC单个信号的变换

作者: wutongyu | 来源:发表于2016-12-23 23:13 被阅读229次

[TOC]

信号类型

  • 单元信号
RACSignal *signal1 = [RACSignal return:@"Some Value"];
RACSignal *signal2 = [RACSignal error:errorObject];
RACSignal *signal3 = [RACSignal empty];
RACSignal *gignal4 = [RACSignal never];

  • 动态信号
    RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        [subscriber sendNext:@1];
        [subscriber sendNext:@2];
        [subscriber sendError:errorObject];
        [subscriber sendCompleted];
        return [RACDisposable disposableWithBlock:^{
            
        }];
    }];
  • cocoa桥接
RACSignal *signal = [self.view rac_signalForSelector:@selector(setFrame:)];
RACSignal *signal = [self.button rac_signalForControlEvents:UIControlEventTouchUpInside];
RACSignal *signal = [self.view rac_willDeallocSignal];
RACSignal *signal = RACObserve(self.view, backgroundColor);

[self.view rac_liftSelector:@selector(convertRect:toView:) withSignals:signal1, signal2, nil];
[self.view rac_liftSelector:@selector(convertPoint:toView:) withSignalsFromArray:@[signql3, signal4]];
[self.view rac_liftSelector:@selector(convertRect:toLayer:) withSignalOfArguments:signal];
  • 信号变换
RACSignal *signal = [signal map:^id(id value) {
   return [value substringFromIndex:1];
}];
  • 序列转换
RACSignal *signal = sequence.signal;

对值的操作


  • map:用于把源信号内容映射成新的内容(信号的转换)
Snip20161223_8.png
  • mapReplace:返回固定的信号
Snip20161223_9.png
  • reduceEach聚合: 用于信号发出的内容是元组,
Snip20161223_10.png
- (RACSignal *)not;
- (RACSignal *)and;
- (RACSignal *)or;
- (RACSignal *)reduceApply;
- (RACSignal *)materialize;
- (RACSignal *)dematerialize;

对数量的变换


  • filter:过滤信号,使用它可以获取满足条件的信号
Snip20161223_11.png
  • ignore:忽略不符合条件的信号
Snip20161223_12.png
// 忽略所有的值
- (RACSignal *)ignoreValues;

// 去重、当上一次的值和当前的值有明显的变化就会发出信号,否则会被忽略掉
- (RACSignal *)distinctUntilChanged;
  • take: 从开始一共取N次的信号
Snip20161223_13.png
  • skip:跳过几个信号,不接收
Snip20161223_15.png
// 取最后N次的信号,前提条件,订阅者必须调用完成,因为只有完成,就知道总共有多少信号.
- (RACSignal *)takeLast:(NSUInteger)count;
// 获取信号直到某个信号执行完成
- (RACSignal *)takeUntilBlock:(BOOL (^)(id x))predicate;
// 跳过信号直到某个信号执行完成
- (RACSignal *)skipUntilBlock:(BOOL (^)(id x))predicate;
- (RACSignal *)skipWhileBlock:(BOOL (^)(id x))predicate;
  • 混合操作
- (RACSignal *)any;
- (RACSignal *)any:(BOOL (^)(id object))predicateBlock;
- (RACSignal *)all:(BOOL (^)(id object))predicateBlock;

- 增加操作

  • startWith:在值的最前面增加
Snip20161223_16.png
  • repeat:无限重复操作
Snip20161223_17.png
  • retry:只要失败,就会重新执行创建信号中的block,直到成功. 一般用于网络请求
Snip20161223_18.png
  • collect:会把历次出现的值,混成一个Array,等信号A完成后,就把这个Array生成一个新的信号返回给B
Snip20161223_20.png
  • Aggregate: 会把历次出现的值累加,返回一个新的值
Snip20161223_21.png
  • Scan: 会把历次出现的值累加,返回累加的中间值
Snip20161223_22.png Snip20161223_23.png

对时间的操作

Snip20161223_25.png

delay: 延时

Snip20161223_26.png
  • throttle:节流 当某个信号发送比较频繁时,可以使用节流,在某一段时间不发送信号内容,过了一段时间获取信号的最新内容发出。,
Snip20161223_27.png Snip20161223_28.png

组合操作

  • concat:组合 按一定顺序拼接信号,当多个信号发出的时候,有顺序的接收信号
Snip20161223_29.png Snip20161223_30.png
  • merge 把多个信号合并为一个信号,任何一个信号有新值的时候就会调用
Snip20161223_31.png Snip20161223_32.png
  • ZipWith:把两个信号压缩成一个信号,只有当两个信号同时发出信号内容时,并且把两个信号的内容合并成一个元组,才会触发压缩流的next事件。
Snip20161223_33.png
  • combineLatest:将多个信号合并起来,并且拿到各个信号的最新的值,必须每个合并的signal至少都有过一次sendNext,才会触发合并的信号。
Snip20161223_34.png Snip20161223_35.png
  • sample:
Snip20161223_36.png
  • TakeUntil 获取信号直到某个信号执行完成
Snip20161223_37.png
  • takeUntilReplacement:
Snip20161223_38.png

相关文章

  • RAC单个信号的变换

    [TOC] 信号类型 单元信号 动态信号 cocoa桥接 信号变换 序列转换 对值的操作 map:用于把源信号内容...

  • RAC使用

    RAC使用 不介绍RAC是啥了,直接上干货 基础用法 创建信号及发送内容 订阅信号 如果只关注单个或者部分,也可以...

  • 01-ReactiveObjC使用记录

    RAC 的核心思想:创建信号 - 订阅信号 - 发送信号 ,并且在 RAC 中我们会看到大量的 block RAC...

  • iOS ReactiveCocoa学习笔记(3):信号传递与数据

    本文知识点:RAC信号传递、RACSequence、RACTuple、利用RAC进行字典转模型。 1.RAC信号传...

  • ReactiveCocoa

    一、RAC的基本概念信号RACSignal: 信号是RAC中最核心的概念,贯穿在整个RAC框架中。它其实是一个信号...

  • RAC使用

    RAC常用宏 KVO监听使用 RAC宏使用 信号类使用 使用信号模拟代理 rac_sequence遍历字典 解包元...

  • RAC

    Rac -- 信号集

  • rac 事件概述及处理

    概述:想要知道rac就必须知道rac中的三个要点 创建信号、发送信号、订阅信号。 reactive事件 reac...

  • GO:0016601,Rac protein signal tr

    Rac protein signal transduction[Rac蛋白信号传导[http://amigo.ge...

  • RAC学习笔记(一)

    Signal RAC的核心是signal,RAC世界所有的消息都是通过信号的方式传递的。 创建信号 它的内部实现是...

网友评论

      本文标题:RAC单个信号的变换

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