为啥要扩展类而不是遵循协议? [复制]

Posted

技术标签:

【中文标题】为啥要扩展类而不是遵循协议? [复制]【英文标题】:Why extend class instead of conforming to a protocol? [duplicate]为什么要扩展类而不是遵循协议? [复制] 【发布时间】:2020-04-23 13:31:27 【问题描述】:

我在很多地方都看到过这样的扩展

class MyClass: UIViewController 
    override func viewDidLoad() 
        super.viewDidLoad()
    


extension MyClass: SomeProtocol 
    func someFunc  

扩展类是否有充分的理由,而不是仅仅遵循类本身的协议?

class MyClass: UIViewController, SomeProtocol 
    override func viewDidLoad() 
        super.viewDidLoad()
    

    func someFunc 

【问题讨论】:

另一个好读物:natashatherobot.com/using-swift-extensions. 【参考方案1】:

在技术上(即实际上),没有区别。这两种方法的行为相同。但是,这允许程序员将协议所需的所有代码放在一个地方。

tl;dr:这是一种风格选择。

【讨论】:

【参考方案2】:

它将具有相同协议一致性的成员组合在一起,从而无需使用// MARK: 标记部分。

【讨论】:

以上是关于为啥要扩展类而不是遵循协议? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我可以为类而不是实例定义 __repr__ 吗? [复制]

为啥要存储对 int (而不是值)的“引用”? [复制]

为啥要在堆上而不是栈上分配内存? [复制]

为啥 KMeans 是一个类而不是 sklearn 中定义的函数?

为啥要使用 Deque 而不是内置 Stack<>? [复制]

为啥要使用 Deque 而不是内置 Stack<>? [复制]