默认情况下,订阅某个 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
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
- 调整Publisher类型
switchToLatest
eraseToAnyPublisher
- 时间控制
debounce
delay
measureInterval
throttle
timeout
- 编解码
encode
decode
- 多Publisher
multicast
- 调试
breakpoint
handleEvents
print
网友评论