协议和扩展…

关键字“协议”用于快速声明协议。 所有类,枚举和结构都可以采用该协议。 协议定义了适合特定任务或功能的方法,属性和其他要求的蓝图。 然后,该协议可以由类,结构或枚举采用,以提供这些要求的实际实现。 满足协议要求的任何类型都被称为符合该协议。 协议在面向协议的编程中被大量使用。

您在协议中声明的所有属性都必须是

{ get}{get set}。 get类型提供了更大的灵活性,我们稍后可以在诸如“ let”或“ var”类型的对象中定义它们。

像OOP一样,我们可以继承/确认另一个协议。 但是在OOP中,我们只能从一个类继承。 也就是说,我们可以有很多子类,但一个类一次只能包含一个父类。 如果您继承一个类,则有时会从父类获取所有API,而有时我们并不需要全部。 在POP(面向协议的编程)中,我们可以一次确认具有多种协议的对象。 这样,我们可以根据需要制定任意数量的协议,然后无论需要什么协议,这些都可以由我们的对象确认。 这提供了很大的灵活性。

合理? 别担心! 我很快会对此做出更多解释!

在以下示例中,我们在集合中使用了两种对象,即类和结构,并将其传递给tableview数据源。

我们可以在函数名称之前使用Mutating关键字,以更改确认对象中的属性(值)。 如果您注意到,在类对象中,我们不需要使用“变异”,因为类对象方法具有预定义的功能来更改其变量。 但是像struct这样的对象是基于值的,因此要更改其属性,我们需要在试图更改其自身对象中的值的函数之前保留“ mutating”关键字。 我们可以在协议中使用初始化程序,以一种简单的方式初始化已确认的对象。

在以下示例中,我们创建了一个对Currency都确认的所有加密货币的集合。 但是集合元素无法访问“货币”协议之外的外部功能或属性。 例如,无法从View Controller中的“ currencies”数组访问CryptoCoin类的“ creatorName ”属性。

我们对现有类型使用“ extension ”关键字,以在POP中添加诸如函数定义和计算属性之类的功能,如果我们在继承对象中需要相同的函数定义(不是全部,而是大多数),该怎么办。 然后我们可以扩展协议,然后在该扩展中定义功能。 然后,无论什么对象需要该功能,都可以确认该协议的那些对象。 如果您愿意,可以在某些子对象中覆盖该func定义。

例子:

我们可以使用扩展将协议一致性添加到现有类型中,您可以在项目中的某些位置定义协议一致性。 我们可以扩展来自(导入的)框架或库的类型。

如果在以上示例中看到,则方形按钮通过确认单个协议来确认两个协议,而该协议本身又被其他两个协议确认。 因此,只有方形按钮才能实现更改背景和文本的两种方法。 其余请根据需要确认协议。 您可以尝试更多以了解更多信息……