filter
filter
只会让满足条件的值通过,filter
接受一个闭包作为引数,该闭包返回一个Bool型别的值,只有结果为true的资料才会被储存下来
[1, 6, 15, 22].publisher
.filter { value in
value > 10
}
.sink(receiveCompletion: { _ in
print("finished")
}, receiveValue: { value in
print(value)
})
/*印出
15
22
finished
*/
compactMap
compactMap
和map
的功能类似,只是会自动过滤掉空的元素,它的引数中的闭包支援返回一个可选型别的引数,因此,我们可以把传进来的资料直接返回,就这麽简单的一个操作就实现了空值过滤
["1", nil, "2", nil, "3"].publisher
.compactMap { value -> Int? in
guard let v = value else {
return nil
}
return Int(v)
}
.sink(receiveCompletion: { _ in
print("finished")
}, receiveValue: { value in
print(value)
})
/*印出
1
2
3
finished
*/
removeDuplicates
removeDuplicates
过滤掉连续的重复值
[1, 1, 1, 2, 2, 1, 2, 3].publisher
.removeDuplicates()
.sink(receiveCompletion: { _ in
print("finished")
}, receiveValue: { value in
print(value)
})
/*印出
1
2
1
2
3
finished
*/
replaceEmpty/replaceNil/replaceError
如果上游Publisher 是个空的数据流,replaceEmpty
会发送指定的值
Empty<Int, Never>()
.replaceEmpty(with: 1)
.sink(receiveCompletion: { _ in
print("finished")
}, receiveValue: { value in
print(value)
})
/*印出
1
finished
*/
空的数据流:在收到
finish
事件前,从来没有收到任何资料Empty:一个只发出完成事件的Publisher
将收到的nil
转换为给定的值
[1, nil, 3].publisher
.replaceNil(with: -1)
.map { $0! }
.sink(receiveCompletion: { _ in
print("finished")
}, receiveValue: { value in
print(value)
})
/*印出
1
-1
3
finished
*/
如果上游Publisher 因错误而终止,replaceError
会发送指定的值
enum MyError: Error {
case failed
}
var subject = PassthroughSubject<Int, Error>()
subject
.replaceError(with: 0)
.sink(receiveCompletion: { completion in
print(completion)
}, receiveValue: { int in
print(int)
})
subject.send(1)
subject.send(2)
subject.send(completion: .failure(MyError.failed))
<<: Day 19 : 笔记篇 06 — 结合资讯处理流程,让笔记的 Metadata 变得更详细
本来去之前,想的是边骑边造访酒庄,然後喝得醉茫茫 骑着脚踏车晃来晃去的XDD 但实际上,是一场体力...
前言 昨天我们介绍了高品质工作四部法,今天让我们来介绍头脑风暴。 头脑风暴,是一种为激发创造力、强化...
工具有许多种,不过随着专案大小与需求不同,搭配适合的实作方式才能达到最佳效益,常见的 Google ...
今天的影片内容为稍微困难的函式与类别 虽然有点小复杂,但弄清楚後对程序的编写将会有很大的帮助 以下为...
今天任务的实作内容,主要是参考这支影片 影片中使用的程序码风格是Vue的Option API,在我的...