操作符
操作符是Combine中重要的部分,通过各种操作符,可以将原本各不相关的逻辑编程一致的、声明的数据流。
具体应用到编程中就是,利用操作符编程新的发布者、订阅者等数据。
转换操作符:
-
map/mapError
map:将接收到的值按照给定的闭包转换为其他值。
mapError:将错误转换为另外一种错误类型。 - flatMap
-
replaceNil
将接收到的nil转换为给定的值 -
scan
将收到的值与当前值(第一次使用 initialResult )按照给定的closure转换。 -
setFailureType
强制将上游 Publisher 的错误类型设置为指定类型。这个方法并不是进行错误类型的转换,因为它并没有让我们提供一个 closure,实际上只是为了让不同的 Publisher 的错误类型进行统一,因而这个 Publisher 实际上是不应该发生错误的。
过滤操作符:
-
filter
只会让满足条件的值通过。 -
compactMap
和 map 的功能类似,只是会自动过滤掉空的元素。 -
removeDuplicates
会跳过在之前已经出现过的值。 -
replaceEmpty/replaceError
如果上游 Publisher 是个空的数据流,replaceEmpty 会发送指定的值,然后正常结束。
如果上游 Publisher 因错误而终止,replaceError 会发送指定的值,然后正常结束。
reduce操作符:
- collect
- ignoreOutput
- reduce
运算操作符:
- count
- min/max
匹配操作符:
-
contains
会返回一个布尔值来表示收到的值是否包含满足给定的条件的值。需要说明的是,一旦收到的值满足条件, contains 会立即发送 true 并且正常结束,而如果收到的值不满足条件,会一直等到收到上游的 Publisher 发出正常结束的消息之后才发送 false 并且正常结束。 -
allSatisfy
会返回一个布尔值来表示所有收到的值是否满足给定的条件。需要说明的是,一旦收到的值不满足条件, allSatisfy 会立即发送 false 并且正常结束,而如果收到的值满足条件,会一直等到收到上游的 Publisher 发出正常结束的消息之后才发送 true 并且正常结束。
序列操作符:
-
drop/dropFirst
drop:会一致丢弃收到的值,直到给定的条件得到满足,然后后面的值会正常发送。 - append/prepend
- prefix/first/last/output
组合操作符:
- combineLatest
- merge
- zip
错误处理操作符:
- assertNoFailure
- catch
- retry
时间控制操作符:
- measureTimeInterval
-
debounce
当有输入时,debounce就会开启一个指定时间的时间窗口,如果在指定时间内收到了新的数据,则再开启一个新的指定时间的时间窗口,之前的窗口作废,直到指定时间内没有新的数据,然后发送最后收到的数据,它的核心思想是可以控制频繁的数据发送问题 - delay
-
throttle
throttle会开启一系列连续的指定时间的时间窗口,每次达到指定时间的临界点就发送最近的一个数据,注意,当收到第一个数据时,会立刻发送。 - timeout
其他操作符
- encode/decode
- switchToLatest
- share
- breakpoint/breakpointOnError
- handleEvents