异步编程与Combine

响应式异步编程模型客户端异步编程 事件 -> 响应(设定程序状态) -> 更新用户界面问题 多个异步操作 -> 设置同一个状态 -> 无法确定调用顺序事件流 事件发生:发布 对事件感兴趣:订阅Combine 通过对事件处理的操作进行组合,来对异步事件进行自定义处理Publisher:负责发布事件Operator:负责转换事件和数据Subscriber:负责订阅事件响应式编程: Publisher -> Operator -> Subscriber
摘要由CSDN通过智能技术生成

异步编程与 Combine

异步编程

asynchronous

Combine

Combine: Customize handling of asynchronous events by combining event-processing operators.

Combine

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<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值