Scan
scan 让我们提供一个暂存值,每次事件发生时我们有机会执行一个 闭包来更新这个暂存值,并准备好在下一次事件时使用它。同时,这个暂存值也将被 作为新的 Publisher 事件被发送出去
let buttonClicked: AnyPublisher<Void, Never>
buttonClicked.scan(0) { value, _ in value + 1 }
scan.png
Delay
delay 简单地将所有事件按照一定事件 延后
delay.pngDebounce
则是设置了一个计时器,在事件第一次到来时,计时器启动。在计 时器有效期间,每次接收到新值,则将计时器时间重置。当且仅当计时窗口中没有新 的值到来时,最后一次事件的值才会被当作新的事件发送出去。
bounce.png
Reduce
经过 reduce 变形后,新的 Publisher 只会在接到上游发出的 finished 事件后,才会将 reduce 后的结果发布出来。而紧接这个结果,则是新的 reduce Publisher 的结束事件
reduce.png
FlatMap
flatMap 的变形闭包里需要返回 一个 Publisher。也就是说,flatMap 将会涉及两个 Publisher:一个是 flatMap 操 作本身所作用的外层 Publisher,一个是 flatMap 所接受的变形闭包中返回的内层 Publisher。flatMap 将外层 Publisher 发出的事件中的值传递给内层 Publisher,然 后汇总内层 Publisher 给出的事件输出,作为最终变形后的结果。
flatMap.png
Merge
它将两个事件流进行合并,在对应的时间完整保留两个事件流 的全部事件
WX20200410-002630.png
zip
它会把两个 (或多个) Publisher 事 件序列中在同一 index 位置上的值进行合并,也就是说,Publisher1 中的第一个事 件和 Publisher2 中的第一个事件结对合并,Publisher1 中的第二个事件和 Publisher2 中的第二个事件合并,以此类推:
zip.png
combineLatest
当 Publisher1 发布 值,或者 Publisher2 发布值时,将两个值合并,作为新的事件发布出去。 不论是哪个输入 Publisher,只要发生了新的事件,combineLatest 就把新发生的事 件值和另一个 Publisher 中当前的最新值合并
combineLatest.png
网友评论