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 中当前的最新值合并