浅谈 Swift 中 “面向协议编程” 思想

最近在某个 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()

阅读全文

Combine 学习笔记(六):Operator 与类型擦除

一、Operator

默认情况下,订阅某个 Publisher,Subscriber 中的 Input 和 Failure 要与 Publisher 的 Output 和 Failure 类型相同。然而实际开发中往往并没有这么理想,此时就要借助 Operator 进行转换。Operator 遵守 Publisher 协议,负责从数据流上游的 Publisher 订阅值,经过转换生成新的 Publisher 发送给下游的 Subscriber。

阅读全文