[TOC]
信號類型
- 單元信號
RACSignal *signal1 = [RACSignal return:@"Some Value"];
RACSignal *signal2 = [RACSignal error:errorObject];
RACSignal *signal3 = [RACSignal empty];
RACSignal *gignal4 = [RACSignal never];
- 動態(tài)信號
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];
}];
- 序列轉(zhuǎn)換
RACSignal *signal = sequence.signal;
對值的操作
- map:用于把源信號內(nèi)容映射成新的內(nèi)容(信號的轉(zhuǎn)換)
Snip20161223_8.png
- mapReplace:返回固定的信號
Snip20161223_9.png
- reduceEach聚合: 用于信號發(fā)出的內(nèi)容是元組,
Snip20161223_10.png
- (RACSignal *)not;
- (RACSignal *)and;
- (RACSignal *)or;
- (RACSignal *)reduceApply;
- (RACSignal *)materialize;
- (RACSignal *)dematerialize;
對數(shù)量的變換
- filter:過濾信號萝毛,使用它可以獲取滿足條件的信號
Snip20161223_11.png
- ignore:忽略不符合條件的信號
Snip20161223_12.png
// 忽略所有的值
- (RACSignal *)ignoreValues;
// 去重逾条、當(dāng)上一次的值和當(dāng)前的值有明顯的變化就會發(fā)出信號,否則會被忽略掉
- (RACSignal *)distinctUntilChanged;
- take: 從開始一共取N次的信號
Snip20161223_13.png
- skip:跳過幾個(gè)信號,不接收
Snip20161223_15.png
// 取最后N次的信號,前提條件猛蔽,訂閱者必須調(diào)用完成,因?yàn)橹挥型瓿山畔撸椭揽偣灿卸嗌傩盘?
- (RACSignal *)takeLast:(NSUInteger)count;
// 獲取信號直到某個(gè)信號執(zhí)行完成
- (RACSignal *)takeUntilBlock:(BOOL (^)(id x))predicate;
// 跳過信號直到某個(gè)信號執(zhí)行完成
- (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:無限重復(fù)操作
Snip20161223_17.png
- retry:只要失敗屎媳,就會重新執(zhí)行創(chuàng)建信號中的block,直到成功. 一般用于網(wǎng)絡(luò)請求
Snip20161223_18.png
- collect:會把歷次出現(xiàn)的值,混成一個(gè)Array,等信號A完成后阔逼,就把這個(gè)Array生成一個(gè)新的信號返回給B
Snip20161223_20.png
- Aggregate: 會把歷次出現(xiàn)的值累加兆衅,返回一個(gè)新的值
Snip20161223_21.png
- Scan: 會把歷次出現(xiàn)的值累加,返回累加的中間值
Snip20161223_22.png
Snip20161223_23.png
對時(shí)間的操作
Snip20161223_25.png
delay: 延時(shí)
Snip20161223_26.png
- throttle:節(jié)流 當(dāng)某個(gè)信號發(fā)送比較頻繁時(shí)嗜浮,可以使用節(jié)流羡亩,在某一段時(shí)間不發(fā)送信號內(nèi)容,過了一段時(shí)間獲取信號的最新內(nèi)容發(fā)出危融。畏铆,
Snip20161223_27.png
Snip20161223_28.png
組合操作
- concat:組合 按一定順序拼接信號,當(dāng)多個(gè)信號發(fā)出的時(shí)候吉殃,有順序的接收信號
Snip20161223_29.png
Snip20161223_30.png
- merge 把多個(gè)信號合并為一個(gè)信號辞居,任何一個(gè)信號有新值的時(shí)候就會調(diào)用
Snip20161223_31.png
Snip20161223_32.png
- ZipWith:把兩個(gè)信號壓縮成一個(gè)信號,只有當(dāng)兩個(gè)信號同時(shí)發(fā)出信號內(nèi)容時(shí)蛋勺,并且把兩個(gè)信號的內(nèi)容合并成一個(gè)元組瓦灶,才會觸發(fā)壓縮流的next事件。
Snip20161223_33.png
- combineLatest:將多個(gè)信號合并起來抱完,并且拿到各個(gè)信號的最新的值,必須每個(gè)合并的signal至少都有過一次sendNext贼陶,才會觸發(fā)合并的信號。
Snip20161223_34.png
Snip20161223_35.png
- sample:
Snip20161223_36.png
- TakeUntil 獲取信號直到某個(gè)信號執(zhí)行完成
Snip20161223_37.png
- takeUntilReplacement:
Snip20161223_38.png