异步编程与 Combine
文章目录
异步编程
Combine
Combine: Customize handling of asynchronous events by combining event-processing operators.
Publisher
Publisher 负责发布事件。
public protocol Publisher {
/// 要发布的值类型
associatedtype Output
/// 可能发布的错误类型
associatedtype Failure : Error
/// 连接订阅者,连上后 subscriber 就可以从 Publisher 接收了
func receive<S>(subscriber: S) where
S : Subscriber,
Self.Failure == S.Failure,
Self.Output == S.Input
}
Publisher 可以发布三种事件:
- output:事件流中发布新的值,类型为 Output;
- failure:发生错误,事件流终止,类型为 Failure; (
.failure(e)
). - finished:事件流结束; (
.finished
)
Operator
scan
Publisher 的 scan
方法提供一个暂存值,每次事件发生时执行一个闭包来更新这个暂存值,并准备好在下一次事件时使用它。这个暂存值也将被作为新的 Publisher 事件被发送出去。
public func scan<T>(
_ initialResult: T,
_ nextPartialResult: (T, Self.Output) -> T)
-> Publishers.Scan<Self, T>
e.g.
let foo: AnyPublisher<Void, Never>
let fooCounter = foo.scan(0) {
value, _ in value + 1 }
foo
发出 E, E, E, …fooCounter
发出 1, 2, 3, …
map
public func map<T>(
_ transform: (Self.Output) -> T)
-> Publishers.Map<