默认情况下,订阅某个 Publisher,Subscriber 中的Input
和Failure
要与 Publisher Output
和Failure
类型相同,但实际开发中往往是不同的,此时就需要借助Operator
进行转换。Operator 遵守 Publisher 协议,负责从数据流上游的 Publisher 订阅值,经过转换生成新的 Publisher 发送给下游的 Subscriber。
Publisher,Operator 和 Subscriber 三者组成了数据流从发布,转换,到订阅的完整链条。
Publisher 发布的值为Int
类型的520
,最后订阅以后输出String
类型的值I Love You
。中间通过map
这个 Operator 进行转换。
let _ = Just(520)
.map { value -> String in
return "I Love You"
}
.sink { receivedValue in
print("最终的结果:\(receivedValue)")
}
/* 输出
最终的结果:I Love You
*/
Operator 非常多,其中很多与 Swift 标准库的函数非常像,比如map, fliter
等。Operator可以通过链式方式进行调用,在后面的案例中会进行讲解。下面按照功能对 Operator 进行了分类。
scan
tryScan
setFailureType
map
tryMap
flatMap
compactMap
tryCompactMap
replaceEmpty
filter
tryFilter
replaceError
removeDuplicates
tryRemoveDuplicates
collect
reduce
tryReduce
ignoreOutput
max
tryMax
count
min
tryMin
allSatisfy
tryAllSatisfy
contains
containsWhere
tryContainsWhere
firstWhere
tryFirstWhere
first
lastWhere
tryLastWhere
last
dropWhile
tryDropWhile
dropUntilOutput
prepend
drop
prefixUntilOutput
prefixWhile
tryPrefixWhile
output
combineLatest
merge
zip
catch
tryCatch
assertNoFailure
retry
mapError
switchToLatest
eraseToAnyPublisher
debounce
delay
measureInterval
throttle
timeout
encode
decode
multicast
breakpoint
handleEvents
print