RAC单个信号的变换

[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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • RAC使用测试Demo下载:github.com/FuWees/WPRACTestDemo 1.ReactiveC...
    FuWees阅读 6,368评论 3 10
  • 我一直觉得,RAC是仿佛已经被遗忘的话题,擅长的人已经把它化为内力,不擅长的早已忘记这个技术的存在,这个暂且按住不...
    daixunry阅读 4,388评论 0 11
  • 1.ReactiveCocoa常见操作方法介绍。 1.1 ReactiveCocoa操作须知 所有的信号(RACS...
    萌芽的冬天阅读 1,021评论 0 5
  • 前言由于时间的问题,暂且只更新这么多了,后续还会持续更新本文《最快让你上手ReactiveCocoa之进阶篇》,目...
    Karos_凯阅读 1,736评论 0 6
  • 烟雨三月,花都开了,在岭南,最引人注目的莫过于那一簇簇的木棉花。火红火红地绽放在枝头,你以为她用尽了洪荒之力,以至...
    maybe缺乏注意力阅读 283评论 1 1