我们为什么要使用扩展?

Why would we use extensions?

我刚刚了解了扩展,我想知道,有一个关于扩展协议的例子。例如,假设我们有协议:

protocol CanFly {
    func canFly()
}

这让所有会飞的类基本上都能飞了。现在假设我们使用扩展来扩展协议,我们这样做:

extension CanFly {
    func canEat() {
        print("I can eat")
    }
}

如果我们可以将 func canEat 添加到我们的协议中,那么这样做的目的是什么?更多这些协议就像一个抽象结构,那么我们为什么要向它添加一个带有主体的函数?

根据 Protocol Extensions 上的 Swift 文档:

Protocols can be extended to provide method, initializer, subscript, and computed property implementations to conforming types. This allows you to define behavior on protocols themselves, rather than in each type’s individual conformance or in a global function.

这意味着您可以 运行 逻辑 在协议扩展函数中 因此您不必在每个 class 符合协议。

就我个人而言,我还发现扩展对于扩展内置 class 的功能很有用,例如 String 或 UIViewController,因为可以从应用程序的任何位置调用扩展。我有一些开源的扩展snippets你可以看看

扩展协议只是扩展的可能用例之一,非常强大和有用,但一开始可能会令人困惑。

我建议您通读 this article,因为它会更深入地探讨更平凡的使用方法。