有次和组里的学长聊天时,听他提过协议的强大功能,今天看到几篇蛮好的文章,特此做下笔记。
协议(Protocol)是 Swift 的基础功能。在 Swift 的标准库中起着主导作用,并且是一种常见的抽象方法。Protocol 提供了与其他语言类似的接口功能。
面向对象编程和面向协议编程的区别:
1.介绍。
这里引用一个例子:
如果我们要开发一款赛车游戏,有不同的对象:汽车,飞机,摩托等等,为了能操作不同的设备,一种常见的实现方案是使用面向对象编程,将所有逻辑封装到基类,其它类继承自基类。因此,基类需要有驾驶、飞行等各种逻辑。
但是刚开始我们会创建不同的基类:汽车逻辑,飞机逻辑。。。但以后可能会出现,会飞的汽车,那么我这时候使用面向对象编程的话可能就需要额外的创建一个基类,这个基类应当同时继承汽车和飞机的基类逻辑,以此来实现汽车+飞机的逻辑,但是swift不支持多重继承,这时候,面向协议编程可以很好解决这一问题。
2.面向对象编程。
协议(protocol)允许将相似的方法、函数、属性放到一组。Swift 中的class
、enum
和struct
都可以遵守协议,但只有class
支持继承。
与继承相比,协议的优势在于对象可以遵守多个协议。
在代理传值中,我们可以用定义代理协议。
// 定义代理协议
protocol DestinationViewControllerDelegate: AnyObject {
func destinationViewController(_ controller: DestinationViewController, didPassMessage message: String)
}
同时我们可以extension扩展代理,为了避免与系统方法冲突,我们在定义方法时也可以加前缀。
参考: