让我们谈谈协议!

面向对象编程的标志之一是继承。 但是,协议并不完全像传统继承那样,传统的继承是一个类从另一类继承而来,但是有了协议,任何给定的类,结构或枚举都可以“符合”协议。 符合协议的类或结构的实例将能够执行协议中概述的任务或指令。

根据Apple的定义,协议就像蓝图,其中包含方法,属性或定义任务所需功能的任何其他要求。 一旦创建了协议,就可以被结构,类或枚举“采用”。

在任何给定的时间,类或结构可以采用多种协议,如以下示例所示:

协议将要求类,结构或枚举的instance属性或type属性具有名称和类型。 该协议不会区分是存储属性还是计算属性。 但是,该协议将定义其仅是可获取的,还是可获取和可设置的。 如果该属性既是可获取的又是可设置的,那么它将不能作为常量存储属性或只读计算属性。 如果该属性是可获取的,那么它可以是任何类型。

这是一个示例gettable实例属性:

如前所述,协议也可以包含实例或类型方法。 这些方法的编写方式与定义任何其他实例或类型方法的方式相同。 方法也可以像属性一样具有静态前缀,在由类实现时也可以使用class或static关键字。

有时,您可能需要允许其所属实例或该实例的任何属性被修改的方法。

协议也可以具有初始化程序,它们的编写方式与类或结构初始化程序完全相同,但是它们不包含花括号或初始化程序主体。 初始化程序分为便利类或指定的初始化程序,但是当由符合该协议的类进一步定义时,必须使用“ required”修饰符

最后,类型如Int,Double或String的协议。