MST
星途 面试题库

面试题:Swift中Combine框架的Publisher和Subscriber概念

请简要阐述在Swift的Combine框架里,Publisher和Subscriber分别代表什么,它们之间是如何交互的?
27.1万 热度难度
编程语言Swift

知识考点

AI 面试

面试题答案

一键面试

Publisher

  • 定义:在 Combine 框架中,Publisher(发布者)是一个产生值序列的对象。这些值可以是任何类型,比如网络请求的响应数据、UI 事件(如按钮点击)等。Publisher 负责生成事件流,并将这些事件传递给感兴趣的对象。
  • 示例Timer.publish(every: 1, on: .main, in: .common).autoconnect() 这个 Timer 就是一个发布者,它每隔 1 秒产生一个事件。

Subscriber

  • 定义:Subscriber(订阅者)是一个接收由 Publisher 发布的值序列的对象。订阅者需要遵循 Subscriber 协议,该协议要求实现 receive(subscription:)receive(_:)receive(completion:) 方法,用于处理订阅过程、接收值以及处理完成或失败事件。
  • 示例:一个自定义的结构体遵循 Subscriber 协议,然后可以订阅某个发布者,接收其发布的值。

交互过程

  1. 订阅:订阅者通过调用 Publishersubscribe(_:) 方法来订阅发布者。发布者会返回一个 Subscription 对象,这个对象用于管理订阅关系,例如可以通过它来取消订阅。
  2. 事件传递:发布者开始发送事件给订阅者。首先,发布者调用订阅者的 receive(subscription:) 方法,传递 Subscription 对象,订阅者可以通过这个对象来控制接收数据的需求(例如请求更多数据)。然后,发布者调用 receive(_:) 方法来传递具体的值。订阅者可以在这个方法中处理接收到的值。
  3. 完成或失败:当发布者完成发布值序列(例如所有数据已发送完毕)或者遇到错误时,会调用订阅者的 receive(completion:) 方法,传递 Completion 枚举值,告知订阅者订阅结束或者发生错误。订阅者可以在这个方法中进行清理工作等。