【问题标题】:Why would we use extensions?我们为什么要使用扩展?
【发布时间】:2020-04-20 05:38:24
【问题描述】:

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

protocol CanFly {
    func canFly()
}

它允许所有可以飞行的班级基本上都可以飞行。现在假设我们使用扩展来扩展协议,我们这样做:

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

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

  • 只是想说如果我弄得一团糟,我很抱歉,哈哈,只是想澄清一些关于扩展的事情

【问题讨论】:

  • Swift 命名约定以小写字母开头的函数命名
  • 协议是一个契约,如果你希望某些结构符合它,他们将不得不实现契约中存在的方法。如果你扩展一个协议,添加一个方法,你不需要他们实现那个功能,你是在为他们提供一些功能。
  • 您可能想要分离一些逻辑,甚至将其存储在另一个文件中。这时候扩展可能会有所帮助。
  • 我明白了,谢谢你的回答

标签: swift swift-extensions


【解决方案1】:

根据Protocol Extensions 上的 Swift 文档:

可以扩展协议以提供方法、初始化器、下标、 以及符合类型的计算属性实现。这允许 您可以在协议本身上定义行为,而不是在每个 类型的个体一致性或在全局函数中。

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

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

【讨论】:

    【解决方案2】:

    扩展协议只是扩展的可能用例之一,它确实强大且有用,但一开始可能会令人困惑。

    我建议您查看this article,因为它更深入地研究了更平凡的,可以说是使用它的方法。

    【讨论】:

      猜你喜欢
      • 2017-12-06
      • 1970-01-01
      • 2018-03-17
      • 2017-11-09
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多