Combine 框架,从0到1 —— 2.通过 ConnectablePublisher 控制何时发布

本文介绍了Combine框架中ConnectablePublisher的概念,通过makeConnectable()和connect()手动控制发布,以及使用autoconnect()操作符实现自动连接。内容包括解决多个订阅者订阅同一发布者时可能遇到的问题,确保所有订阅者都能接收到数据。
摘要由CSDN通过智能技术生成

 

本文首发于 Ficow Shen’s Blog,原文地址: Combine 框架,从0到1 —— 2.通过 ConnectablePublisher 控制何时发布

 

内容概览

  • 前言
  • 使用 makeConnectable() 和 connect() 手动控制发布
  • 使用 autoconnect() 操作符进行自动连接
  • 总结

 

前言

 

使用 Connectable Publisher, 你可以决定发布者何时开始发送订阅元素给订阅者。那么,为什么我们需要这么做?

使用 sink(receiveValue:) 可以立刻开始接收订阅元素,但是这可能不是你想要的结果。当多个订阅者订阅了同一个发布者时,有可能会出现其中一个订阅者收到订阅内容,而另外一个订阅者收不到的情况。

比如,当你发起一个网络请求,并为这个请求创建了一个发布者以及连接了这个发布者的订阅者。

图片alt

然后,这个订阅者的订阅操作触发了实际的网络请求。在某个时间点,你将第二个订阅者连接到了这个发布者。如果在连接第二个订阅者之前,网络请求已经完成,那么第二个订阅者将只会收到完成事件,收不到网络请求的响应结果。这时候,这个结果将不是你所期望。

在使用 Combine 的过程中,我们往往需要面对这些问题。现在就来弄清楚如何处理这一类问题吧~

 

使用 makeConnectable() 和 connect() 控制发布

 

ConnectablePublisher 是一个协议类型,它可以在你准备好之前阻止发布者发布元素。

/// 可连接的发布者,它提供了显式的连接、取消订阅的方式
///
/// 使用 `makeConnectable()` 来从任何一个失败类型是 `Never` 的发布者创建一个 `ConnectablePublisher`
@available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
public protocol ConnectablePublisher : Publisher {
   

    /// 连接到发布者并返回一个用于取消发布的 `Cancellable` 实例
    ///
    /// - 返回值: 一个用于取消发布的 `Cancellable` 实例
    func connect() -> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值