面试题答案
一键面试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
协议,然后可以订阅某个发布者,接收其发布的值。
交互过程
- 订阅:订阅者通过调用
Publisher
的subscribe(_:)
方法来订阅发布者。发布者会返回一个Subscription
对象,这个对象用于管理订阅关系,例如可以通过它来取消订阅。 - 事件传递:发布者开始发送事件给订阅者。首先,发布者调用订阅者的
receive(subscription:)
方法,传递Subscription
对象,订阅者可以通过这个对象来控制接收数据的需求(例如请求更多数据)。然后,发布者调用receive(_:)
方法来传递具体的值。订阅者可以在这个方法中处理接收到的值。 - 完成或失败:当发布者完成发布值序列(例如所有数据已发送完毕)或者遇到错误时,会调用订阅者的
receive(completion:)
方法,传递Completion
枚举值,告知订阅者订阅结束或者发生错误。订阅者可以在这个方法中进行清理工作等。