Scan
scan 讓我們提供一個暫存值,每次事件發生時我們有機會執行一個 閉包來更新這個暫存值,并準備好在下一次事件時使用它。同時,這個暫存值也將被 作為新的 Publisher 事件被發送出去
let buttonClicked: AnyPublisher<Void, Never>
buttonClicked.scan(0) { value, _ in value + 1 }
Delay
delay 簡單地將所有事件按照一定事件 延后
Debounce
則是設置了一個計時器,在事件第一次到來時,計時器啟動。在計 時器有效期間,每次接收到新值,則將計時器時間重置。當且僅當計時窗口中沒有新 的值到來時,最后一次事件的值才會被當作新的事件發送出去。
Reduce
經過 reduce 變形后,新的 Publisher 只會在接到上游發出的 finished 事件后,才會將 reduce 后的結果發布出來。而緊接這個結果,則是新的 reduce Publisher 的結束事件
FlatMap
flatMap 的變形閉包里需要返回 一個 Publisher。也就是說,flatMap 將會涉及兩個 Publisher:一個是 flatMap 操 作本身所作用的外層 Publisher,一個是 flatMap 所接受的變形閉包中返回的內層 Publisher。flatMap 將外層 Publisher 發出的事件中的值傳遞給內層 Publisher,然 后匯總內層 Publisher 給出的事件輸出,作為最終變形后的結果。
Merge
它將兩個事件流進行合并,在對應的時間完整保留兩個事件流 的全部事件
zip
它會把兩個 (或多個) Publisher 事 件序列中在同一 index 位置上的值進行合并,也就是說,Publisher1 中的第一個事 件和 Publisher2 中的第一個事件結對合并,Publisher1 中的第二個事件和 Publisher2 中的第二個事件合并,以此類推:
combineLatest
當 Publisher1 發布 值,或者 Publisher2 發布值時,將兩個值合并,作為新的事件發布出去。 不論是哪個輸入 Publisher,只要發生了新的事件,combineLatest 就把新發生的事 件值和另一個 Publisher 中當前的最新值合并