目录
Combine
中对
Publisher
的值进行操作的方法称为
Operator
(操作符)。
Combine
中的
Operator
通常会生成一个
Publisher
,该
Publisher
处理传入事件,对其进行转换,然后将更改后的事件发送给
Subscriber
。
本篇文章主要介绍一下过滤这一类的操作符。
filter(_: )
filter
操作符主要用户过滤数据,比如下面的数据中,将大于5的数输出。
func filterSample() {
let intArray = [1, 2, 3, 4, 5, 6, 7, 8, 9]
_ = intArray.publisher
.filter {
$0 > 5
}
.sink {
value in
print("value is : \(value)")
}
}
输出为:
value is : 6
value is : 7
value is : 8
value is : 9
tryFilter(_: )
使用tryFilter(_:)
来过滤在抛出错误的闭包中求值的元素。如果闭包抛出错误,则Publisher
将因该错误而失败终止。
func tryFilterSample() {
struct ZeroError: Error {
}
let intArray = [1, 2, 3, 4, 5, 6, 0, 8, 9]
_ = intArray.publisher
.tryFilter {
if $0 == 0 {
throw ZeroError()
} else {
return $0 > 5
}
}
.sink(receiveCompletion: {
completion in
print("Received completion: \(completion)")
}, receiveValue: {
value in