最近在某个 iOS 开发交流群里看到了一个非常基本、却又很典型的例子:
protocol Eatable { func eat() } extension Eatable { func eat() { print("吃东西") } } struct Person: Eatable { func eat() { print("吃米饭") } } let p1: Person = Person() let p2: Eatable = Person() p1.eat() p2.eat()
最近在某个 iOS 开发交流群里看到了一个非常基本、却又很典型的例子:
protocol Eatable { func eat() } extension Eatable { func eat() { print("吃东西") } } struct Person: Eatable { func eat() { print("吃米饭") } } let p1: Person = Person() let p2: Eatable = Person() p1.eat() p2.eat()
为了方便使用,Foundation 对一些常用的操作扩充了基于 Publisher 的 API,我们在开发中可以直接进行调用。本文就逐个讨论这些 API 的具体用法。
默认情况下,订阅某个 Publisher,Subscriber 中的 Input 和 Failure 要与 Publisher 的 Output 和 Failure 类型相同。然而实际开发中往往并没有这么理想,此时就要借助 Operator 进行转换。Operator 遵守 Publisher 协议,负责从数据流上游的 Publisher 订阅值,经过转换生成新的 Publisher 发送给下游的 Subscriber。
在实际开发中,当 Subscriber 在某个时候不想接收 Publisher 发布的数据时,可以取消订阅以释放资源。Combine 中提供了 Cancellable 协议,该协议中定义了一个 cancel 方法,用于取消订阅流程。 阅读全文