协议能让你定义类型需要满足的接口,满足某个协议的类型被称为符合这个协议,比如在后期的SwiftUI中的第一件事就是要满足View协议。
协议是描述一组特定的相似动作或行为的方法的集合:一个表视图应该有多少行?多少节?章节标题应该是什么?用户可以移动行吗?如果是这样,当他们这样做时会发生什么?
协议是一种用来表达 API 更加简洁的方式。使用 protocols(协议),可以让调用者传递他们想要的任何Class类/struct结构体、enum枚举,但是通常调用者需要实现协议规定的方法和属性。
协议本质就是让调用者(实现协议者)用任何它想的东西调用一个应用程序接口(API)的方法。可以是结构体、枚举类型、类等,并且可以传递任何的参数。协议实际上就是一个变量和函数的清单,一个由变量和函数组成的清单,如果要符合协议就需要在在应用程序接口中使用清单里的变量与函数,以表达遵守的协议。
协议让应用程序接口变得非常灵活且易于表达,对标准化匿名通讯机制是非常有好处的,如MVC 视图和控制器之间的通信中那些will, did, should, data, at, count 方法,视图与控制器之间匿名通信的方式(因为视图是泛型的)。而协议就是如何让MVC正常工作。
所有这些问题都涉及到类似的事情:数据进入UITableView。结果,它们都进入了一个称为的协议UITableViewDataSource。该协议内部的某些行为是可选的。例如,canEditRowAt是可选的,如果您自己不提供值,则默认为true。
Swift的协议本质上是一种让我们定义功能并在需要时提供默认实现的方法。它们是该语言的基本功能,它使我们能够强制执行类型要求,创建单元测试模拟,轻松共享功能等等。
1、自定义一个协议
//自己定义一个协议
protocol MyProtocol {
//下面是一个协议内容
var marks: Int { get set } //该属性是变量或者带有get与set的计算属性
var result: Bool { get } //该属性是常量或者只有get的计算属性
func attendance() -> String//定义一个返回String的方法
}
2、使用协议:
//使MyClass符合MyProtocol协议
class MyClass: MyProtocol {
var marks = 0
let result = true//只有get
func attendance() -> String{
return "55mx.com"
}
}
在Swift中工作时,经常需要使您的类符合协议。这是通过将协议名称添加到类定义中,然后填写所需的任何方法来完成的,如下所示:
class ViewController: UIViewController, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//请求10行
return 10
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// 返回一个虚拟的表格视图单元格;您自己的代码应该使用原型单元格或类似的东西
return UITableViewCell()
}
}
当您这样做时(当您向Swift保证您的类符合协议时),您会很害怕它会检查以确保您是对的。这意味着,如果您未添加对所有必需方法的支持,它将拒绝构建您的代码,这是一种有用的安全措施。
1、运算及比较类的协议
2、哈希类协议
3、表示字符串类的协议
4、原始数据类协议
5、可编解码的协议
6、编码器和解码器
7、编码容器协议
8、解码容器协议
9、文字编码
10、文字变量
11、文字字符串
除非注明,网络人的文章均为原创,转载请以链接形式标明本文地址:https://www.55mx.com/post/105
《【进阶篇】1 协议(protocol)的定义与使用及常用的系统协议》的网友评论(0)