默认情况下,订阅某个 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
flatMapcompactMap
tryCompactMap
replaceEmpty
filter
tryFilter
replaceError
removeDuplicates
tryRemoveDuplicatescollect
reduce
tryReduce
ignoreOutputmax
tryMax
count
min
tryMinallSatisfy
tryAllSatisfy
contains
containsWhere
tryContainsWherefirstWhere
tryFirstWhere
first
lastWhere
tryLastWhere
last
dropWhile
tryDropWhile
dropUntilOutput
prepend
drop
prefixUntilOutput
prefixWhile
tryPrefixWhile
outputcombineLatest
merge
zipcatch
tryCatch
assertNoFailure
retry
mapErrorswitchToLatest
eraseToAnyPublisherdebounce
delay
measureInterval
throttle
timeoutencode
decodemulticastbreakpoint
handleEvents
print