RAC信號操作解釋合集

文章系列
《ReactiveCocoa 概述》
《RACSignal》
《RACDisposable》
《RACSubject、RACReplaySubject(內(nèi)附冷信號和熱信號的區(qū)別)》
《集合RACTuple、RACSequence》
《RAC 中的通知、代理、KVO, 基本事件、方法的監(jiān)聽》
《rac_liftSelector》
《RACMulticastConnection》
《RACCommand》
《RAC - 核心方法bind》
《RAC - 定時器》
《RACScheduler》
《RAC - 點擊獲取驗證碼 demo》
《RAC - 映射(Map & flattenMap)》
《RAC信號操作解釋合集》
《RAC - 信號的生命周期》

mapReplace (替換)

將信號中的內(nèi)容全部替換為指定的

- (__kindof RACStream *)mapReplace:(nullable id)object;

reduceEach (變換)

信號必須發(fā)送的是一組值(RACTuple),通過reduceBlock接收一組值,然后處理返回一個值

- (__kindof RACStream *)reduceEach:(RACReduceBlock)reduceBlock;

filter (過濾)

fillter 返回一個BOOL變量,當(dāng)BOOL為true的使用才會返回信號, 否則就過濾掉了.

- (__kindof RACStream<ValueType> *)filter:(BOOL (^)(ValueType _Nullable value))block;

ignore (忽略)

忽略信號中的某些值

- (RACSignal<ValueType> *)ignore:(nullable ValueType)value;

take (提前終止)

實現(xiàn)原理是bind; 后面接數(shù)字,取前多少個值, 阻斷信號的執(zhí)行, 直接停止訂閱了.

- (__kindof RACStream<ValueType> *)take:(NSUInteger)count;

skip (跳過)

實現(xiàn)原理是bind; 跳過前幾次的值

- (__kindof RACStream<ValueType> *)skip:(NSUInteger)skipCount;

concat (連接)

把一組信號串聯(lián)起來,前面一個信號complete,后面一個信號才開始發(fā)揮作用, 連接在后面, 形成一個新的信號.
注: 不論哪個信號存在error , 到第一個error 就終止連接.

+ (__kindof RACStream<ValueType> *)concat:(id<NSFastEnumeration>)streams;

startWith (在前面增加量)

實現(xiàn)原理是concat, 在信號之前增加一個值, 也就是說在源信號之前先發(fā)送一個值.

- (__kindof RACStream<ValueType> *)startWith:(nullable ValueType)value;

repeat (重復(fù)增加)

當(dāng)信號發(fā)送complete的時候,重新訂閱, 反復(fù)增加原始數(shù)據(jù).
注: RACSignal 自己的方法. 若repeat 一個錯誤信息, 只repeat 一次就終止了.

- (RACSignal *)repeat ;

retry (反復(fù)重新添加)

發(fā)送error事件之后重試,重新訂閱, 即越到錯誤越來越勇, 反復(fù)訂閱, 反復(fù)開始, 一直不成功, 一直retry.

- (RACSignal<ValueType> *)retry;
- (RACSignal<ValueType> *)retry:(NSInteger)retryCount;

doNext (副作用操作)

作用: 用來往信號注入side effects, 顯示標記side effects的方法,在每次信號subscribeNext之前執(zhí)行.
不改變原value , 只是想干點啥, 比如打印.

- (RACSignal *)doNext:(void (^)(id x))block ;

collect (收集)

把信號所有的數(shù)據(jù)都存到一個數(shù)組里面, 等到complete事件的時候,把這個數(shù)組發(fā)出去. 原理是: 一連串操作的集合->經(jīng)過 aggregateWithStartFactory操作、defer操作、scanWithStartbind等等(文中都有解釋)總之, 它的大致原理是:1、scanWithStart,前面我們解釋過,這個是使用block合并信號的前一個值和下一個值,返回一個新值的操作,初始值我們指定一個可變數(shù)組,block的操作是把下一個值添加到這個數(shù)組中來;2、takeLast操作來保證原始信號結(jié)束之后(complete)發(fā)送最近的一個結(jié)果。
注:要確保調(diào)用collect 的信號可以完結(jié), 否則得到的新信號將成為never 信號.

- (RACSignal*)collect;

aggregateWithStartFactory (加和操作)

  • 偽遞歸操作

scanWithStart (掃描)

作用: 信號內(nèi)部信號全部掃描一遍, 做操作; 也就是使用reduceBlock從左到右合并receiver包含的值.
startingValue是第一個left值,信號的第一個值是right值,使用block進行合并,返回新值,以后的left是上一次合并之后的值,right是next的值,效果的疊加.

- (RACSignal *)scanWithStart:(nullable id)startingValue reduce:(id _Nullable (^)(id _Nullable running, ValueType _Nullable next))reduceBlock RAC_WARN_UNUSED_RESULT;

throttle (閥門)

每次發(fā)送的數(shù)據(jù),都經(jīng)過interval的間隔之后才發(fā)出。在interval時間內(nèi)發(fā)送的所有信號只有最后一個數(shù)據(jù)被發(fā)送,前面的都會被拋棄。

- (RACSignal<ValueType> *)throttle:(NSTimeInterval)interval RAC_WARN_UNUSED_RESULT;

merge (信號投射)

合并的信號的意思是,每個原始信號sendNext都會被當(dāng)作返回信號的一次值發(fā)送(基于bind,綁定).
按照時間順序平鋪投射到一個信號上, 受線程影響.

- (RACSignal *)merge:(RACSignal *)signal 

zip (拉鏈)

類方法。它合并一組信號。必須任何一個信號都發(fā)送了一次值,合并后的信號才會把這幾個信號的同一批次的值封裝為RACTuple發(fā)送出去。例如合并兩個信號,第一個信號發(fā)了兩次1,2,第二個沒發(fā)送,那么不會有信號發(fā)出;如果第二個信號發(fā)送一次3,那么合并之后的信號會發(fā)送一個RACTuple(1,3),除非第二個信號在發(fā)送第二個值,第一個信號發(fā)送的第二個值才會被一起包裝作為一次信號發(fā)送出去。

+ (RACSignal<RACTuple *> *)zip:(id<NSFastEnumeration>)signals 

combineLatest

兩個信號是否產(chǎn)生最新值, 打成tuple, 先結(jié)束的就終止了.

+ (RACSignal<RACTuple *> *)combineLatest:(id<NSFastEnumeration>)signals

takeUntil (通過信號B 來結(jié)束信號A)

原始信號一直發(fā)送信號,直到,替代的信號發(fā)出事件,原始信號終止.
例: 當(dāng)信號B有值時,信號A 終止訂閱.

switchToLatest

原始信號必須是發(fā)送信號的信號(sendNext:(RACSignal)…),發(fā)送的信號會被訂閱,直到發(fā)送下一個信號,前一個被發(fā)送的信號就終止訂閱,方法的作用是,每次訂閱最新的信號。和map一起往往被認為是替代flattenMap的方案.

.End

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容