第二章 Publisher 和 Subscriber (Part. 1)

本文介绍了SwiftUI的Combine框架中的Publisher和Subscriber,包括它们的基本概念、代码示例和工作流程。通过PassthroughSubject和Just等示例解释如何启动Combine流程,并探讨了错误处理、订阅管理和类型擦除等关键概念。
摘要由CSDN通过智能技术生成

Publiser


简介

Combine 的核心是发布者协议。该协议定义了一种类型的要求,以便能够随时间向一个或多个订阅者传输一系列值。换句话说,你可以将感兴趣的值,用发布者将其用事件的方式发布出去。

发布者可以发出零个或多个值,但只能发出一个完成事件,可以是正常的完成事件,也可以是错误。一旦发布者发出完成事件,它就完成了,不能再发出任何事件。

在实际应用中,我们用Publishers来启动我们Combine流程,也可以称为Combine链,试想下你如果想观察一个数据的变化,那么我们要把数据放到Combine流程中,然后我们可以用订阅的方式来异步的接收他的变化值。这些的关键起始点,就是要把数据,用Publishers发布出去。
比如我们可以用PassthroughSubject和CurrentValueSubject发布数据,同时发布错误;
可以用Just发布一个错误类型默认为Never的数据,等等。

所以,实际应用中使用Combine的核心思想之一,就是将数据当成Publishers的Output,开始Combine流程。


代码说明

我们在playground中观察如下代码:
 

// 1
var cancellable = Set<AnyCancellable>()
// 2
let myPublisher = PassthroughSubject<Int, Never>()
// 3
myPublisher
    .sink(receiveCompletion: { completion in
         // 4
         switch(completion) {
         case .finished:
             print("finished")
         case .failure(let error):
             print(error.localizedDescription)
         }
     }, receiveValue: { value in
         // 5
         print(value)
     })
     .store(in: &cancellable)
 
// 6
myPublisher.send(2)
// 7
myPublisher.send(completion: .finished)
// 8
myPublisher.send(3)

1、声明AnyCancellable的集合,用于管理Combine的内存
2、声明一个Publisher,我们用PassthroughSubject来返回一个Publisher,如果您没有使用过,也不要害怕,后面我们会详细说明这个Publisher,同时他也是我们会经常用到的一个生成Publisher的函数。
     他生成了一个Output值为Int型,错误类型为Never,也就是永远不会出现错误。
3、开始Combine的订阅流程,用sink来实现订阅,也就是第一章提到的`Subscriptions`
4、处理订阅的状态,分为完成状态(.finished)和错误状态(.failure(error))
5、处理数据接收,在这里我们将数据打印
6、开始发布数据,首先发布了一个整型数据(2)
7、发布结束状态,表示订阅完成
8、再次发布一个数据,

PublisherSubscriber是一种常见的消息传递模式,通常用于实现异步通信。在创建PublisherSubscriber之前,需要先确定消息的格式和传递方式。 1. 确定消息格式:在创建PublisherSubscriber之前,需要确定消息的格式,包括消息的类型、名称、参数等。这些信息将作为消息的标识符,用于区分不同的消息。 2. 确定传递方式:在创建PublisherSubscriber之前,需要确定消息的传递方式,包括消息的发布和订阅机制、消息的传递方式、消息的过滤等。这些信息将影响消息的传递效率和精度。 3. 创建Publisher:创建Publisher需要先创建一个消息通道,然后将消息发布到该通道中。在创建Publisher时,需要指定消息的名称和类型,并设置相应的参数。另外,还需要定义消息的发送方式和频率,以及消息的过滤条件等。 4. 创建Subscriber:创建Subscriber需要先订阅相应的消息通道,然后等待消息的到来。在创建Subscriber时,需要指定要订阅的消息名称和类型,并设置相应的参数。另外,还需要定义消息的接收方式和频率,以及消息的过滤条件等。 5. 测试PublisherSubscriber:创建完PublisherSubscriber后,需要进行测试,以确保消息的发布和订阅机制正常工作。在测试过程中,需要模拟不同的消息情况,并观察消息的传递情况,以及消息的处理效率和精度等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值