为什么我们要使用扩展添加协议一致性?

时间:2016-12-20 07:12:25

标签: swift

如果我有一个课程overflow: scroll和一个协议Christmas,为了使Merry符合Christmas,很多人会这样做:

Merry

Demo也鼓励它。

然而,在定义类时,让类符合协议是否更方便?像这样:

class Christmas {
    ...
}

extension Christmas: Merry {
    ...
} 
  

两种方法的区别是什么?

3 个答案:

答案 0 :(得分:7)

它们是不同的编码风格。第一个选项

class Christmas {
   ...
}

extension Christmas: Merry {
    ...
}
当你看全班时,

更清洁。您可以立即看到该类符合的所有协议实现。

使用第二个选项,您将协议的实现放在类中,并将其与类方法混合。但是,如果您使用

//MARK: - 

代码变得不那么干净,而不是使用扩展时。例如:

protocol Merry: class {
    func celebrate()
}

class Cristmas: NSObject, Merry {
    private var santa: AnyObject?

    //MARK: - Private Methods
    private func callSanta() {
        //calling Santa
    }

    //MARK: - Merry Implementation
    func celebrate() {
        //celebration starts here
    }
}

在查看整个课程时,您会清楚地看到协议实现的分离: enter image description here

两个选项的功能相同。

答案 1 :(得分:1)

类符合protocolextension之间存在差异。

在编写class时,您知道这应该符合协议,然后您可以使用类符合协议。但是,extensions意味着扩展现有classes的功能。在编写课程并使用它一年后,您需要为您的课程添加一些额外的功能,因此您可以简单地扩展课程,而不是修改课程。扩展不仅适用于您的类,您可以扩展可用的每个类的行为(本机框架,第三方库)。

答案 2 :(得分:0)

有一点不同。第一个按照您的预期确认协议。来到第二个也确认协议,并且除了那些方法写作扩展

extension Christmas: Merry {
    ...
} 

这样可以通过具有该类名称的项目使这些方法可用"圣诞节"