前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Combine-Publisher

Combine-Publisher

作者头像
YungFan
发布2020-04-09 11:28:59
7300
发布2020-04-09 11:28:59
举报
文章被收录于专栏:学海无涯学海无涯

概念

  • Combine 中包括Publisher在内的一系列角色都使用协议来进行定义,这是 Swift 面向协议编程思想的具体体现。
  • Publisher 随着时间推移向一个或多个Subscriber发布数据。
  • Publisher 最主要的工作其实有两个
    • 被 Subscriber 订阅
    • 发布数据和数据

Publisher定义

代码语言:javascript
复制
public protocol Publisher {
    /// 发送的数据的类型
    associatedtype Output

    /// Publisher可能产生的错误类型,如果不会产生错误,则使用Never
    associatedtype Failure: Error

    /// 在调用Publisher的subscribe(_:)方法时方法内部会调用此方法去连接Subscriber
    func receive<S>(subscriber: S) where S: Subscriber, Self.Failure == S.Failure, Self.Output == S.Input
}

extension Publisher {
    /// 将指定的Subscriber连接到此Publisher
    /// 调用此方法连接而不是receive(subscriber:)
    public func subscribe<S>(_ subscriber: S) where S: Subscriber, Self.Failure == S.Failure, Self.Output == S.Input
}

解读

  • OutputFailure定义了 Publisher 所发布的数据的类型和可能产生的错误类型。
  • subscribe (_:)方法将 Subscriber 连接到 Publisher。 它规定: Publisher 的Output必须与 Subscriber 的Input类型匹配,Failure也是如此。

内置Publisher

  • Just:只提供一个结果然后终止的 Publisher ,失败类型为<Never>。(★)
  • Future:异步操作的 Publisher ,用一个闭包初始化,该闭包最终解析为单个输出数据或失败完成。(★)
  • Empty: 一个从不发布任何数据的 Publisher ,并且可以选择立即完成。
  • Fail:立即使用指定错误终止的 Publisher 。
  • Optional:如果可选数据具有数据,则 Publisher 仅向每个 Subscriber 发布一次可选数据。
  • Sequence:发布给定数据序列的 Publisher 。
  • Deferred:在运行提供的闭包之前等待订阅的 Publisher ,以便为新的 Subscriber 创建 Publisher 。
  • Record:允许记录一系列InputCompletion,供每个 Subscriber 回放。
  • Publishers.Share:实现者为类的 Publisher ,其行为与其上游 Publisher 相同。
  • Publishers.Multicast:多播 Publisher ,当有多个 Subscriber,但希望上游 Publisher 的每个数据仅调用一次receive(_ :)时使用。
  • ObservableObject:与 SwiftUI 一起使用,符合ObservableObject协议的对象可以提供 Publisher 。(★)
  • @Published:属性包装器,用来把一个属性数据转变为 Publisher 。(★)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概念
    • Publisher定义
      • 解读
    • 内置Publisher
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档