Swift(3.0)中的协议和代表:

协议定义了特定任务或功能的方法,属性和其他要求的蓝图。 然后,该协议是一项必需的任务,然后可由类,结构或枚举采用以提供这些要求的实现。 当一种类型满足要求时,就称其符合该协议。

句法

协议也遵循与类,结构和枚举类似的语法-

 协议SomeProtocol { 
//协议定义
}

在类,结构或枚举类型名称之后声明协议。 也可以具有单个和多个协议声明。 如果定义了多个协议,则它们必须用逗号分隔,如以下示例所示:

  struct SomeStructure:Protocol1,Protocol2 { 
//结构定义
}

当必须为超类定义协议时,协议名称应在超类名称后加上逗号。 例如:

  class SomeClass:SomeSuperclass,Protocol1,Protocol2 { 
//类定义
}

协议可以具有存储或计算的属性,实例或变异方法或功能。 但是,如果它们是计算属性,变量实例或变异函数(不带花括号),则不能使用常量而是使用var (变量)来声明它们以符合协议。

此外,协议是类型,其名称以大写字母开头。 根据Apple文档:

协议不仅是一种类型,还可以扩展,它们可能要求特定的初始化程序通过符合类型来实现,并且总体上需要针对符合性类型的更多功能或各种规范。

在实现设计模式或委托时,Swift开发人员经常使用协议。 委托是一种设计模式,使类或结构可以其某些职责移交给(或委托 )其他类型的实例。 根据Apple文档:

通过定义封装委托职责的协议来实现此设计模式,以确保符合类型(称为委托)可以提供已委托的功能。 委托可用于响应特定操作,或从外部源检索数据而无需了解该源的基础类型。

一个iOS开发人员经常会遇到的协议和委托模式的示例是在将TableView实现为常规ViewController时。 UITableView对象必须具有充当数据源的对象和充当委托的对象。 通常,这些对象是应用程序委托,或更常见的是自定义UITableViewController对象。 尽管它们有许多可选方法,但要完全符合Apple文档的DataSource协议,始终需要两种方法:

tableView(UITableView, numberOfRowsInSection: Int)

需要。 告诉数据源返回表视图给定部分中的行数。

func tableView(UITableView, cellForRowAt: IndexPath)

需要。 要求数据源在单元格中插入表格视图的特定位置。

换句话说,当插入,删除或重新排列表的行时,数据源提供UITableView构造表和管理数据模型所需的信息。

除了数据源之外, UITableView对象的委托人还必须采用UITableViewDelegate协议。 委托管理表行的配置和选择,行重新排序,突出显示,附件视图以及编辑操作。 如果tableView与常规UIViewController一起使用,则常规ViewController是委托。

上面是一个简单的示例,Swift开发人员经常遇到,而Apple为我们提供了这些示例。 而且,程序员不仅限于Apple的协议和委托。 我们可以在编程时为代码编写自己的代码,并在有用时编写自己的协议和委托。

有关此概念和相关主题的更多信息,请参阅Apple文档:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html