Swift 协议
协议为方法、属性和其他需求功能提供了一个蓝图。它只是描述了方法或属性的轮廓,而不是具体实现。方法和属性的具体实现可以通过定义类、函数和枚举来完成。遵循协议就是满足协议需求的方法或属性。
语法
协议的语法与类、结构体和枚举类似 –
协议在类、结构体或枚举类型名称之后声明。也可以声明单个和多个协议。如果定义了多个协议,则必须用逗号隔开。
当必须为超类定义协议时,协议名称应该紧跟超类名称后面,使用逗号分隔。
属性和方法要求
协议用于指定特定类类型的属性或实例属性。它仅指定类型或实例属性,而不指定其是存储属性还是计算属性。此外,它用于指定属性是否可“获得”或“设置”。
属性要求通过“var”关键字声明为属性变量。{get set}用于在类型声明后声明可获取和可设置的属性。可获取的属性在其类型声明后通过{get}属性进行说明。
当我们在playground中运行上述程序时,我们会得到以下结果−
方法变异要求
当我们在playground上运行上面的程序时,我们得到以下结果−
初始化器要求
Swing允许用户初始化协议以遵循与普通初始化器类似的类型的一致性。
语法
例如
协议初始化需求的类实现
指定的或便利的初始化方法允许用户通过保留的 ‘required’ 关键字来初始化一个协议以符合其标准。
通过’required’修饰符,在所有子类中确保协议的一致性,用于显式或继承实现。
当子类重写其超类的初始化要求时,使用’override’修饰符关键字进行指定。
当我们使用playground运行以上程序时,我们得到以下结果:
协议作为类型
与其在协议中实现功能,协议作为函数、类、方法等的类型使用。
协议可以作为类型在以下情况下访问:
- 作为参数或返回类型的函数、方法或初始化
-
常量、变量或属性
-
作为项目的数组、字典或其他容器
当我们在Playground中运行上述程序时,我们将获得以下结果−
使用扩展添加协议一致性
通过使用扩展,可以采用现有类型并符合新协议。可以借助扩展来向现有类型添加新属性、方法和下标索引。
协议继承
Swift 4允许协议从已定义的属性中继承。它类似于类继承,但可以选择使用逗号分隔多个继承的协议。
当我们使用 playground 运行以上程序时,我们得到以下结果 –
仅限类的协议
当协议被定义并且用户希望使用类来定义协议时,应该先定义类,然后再添加该类所支持的协议。
当我们在playground上运行上面的程序时,我们会得到以下结果 −
协议组合
在Swift 4中,可以通过协议组合同时调用多个协议。
语法
示例
当我们在playground上运行上述程序时,我们得到以下结果 –
检查协议一致性
协议一致性的测试类似于类型转换,可以使用’is’和’as’运算符来测试。
- 如果一个实例符合协议标准,则is运算符返回true,否则返回false。
-
下转型运算符的as?版本返回协议类型的可选值,如果实例不符合该协议,则该值为nil。
-
下转型运算符的as版本将强制进行协议类型的转换,如果转换不成功,则触发运行时错误。
当我们在playground中运行上面的程序时,我们会得到以下结果−