面向协议编程

面向协议编程是Swift的一个重要特性,它允许不同类型遵循相同的协议,实现多态性而无需继承。在文章中,通过赛车游戏的例子说明了如何使用协议避免多重继承的问题,以及在代理设计模式中如何利用协议进行传值。协议提供了灵活性,让对象可以遵守多个协议,扩展功能而不影响原有结构。
摘要由CSDN通过智能技术生成

有次和组里的学长聊天时,听他提过协议的强大功能,今天看到几篇蛮好的文章,特此做下笔记。

协议(Protocol)是 Swift 的基础功能。在 Swift 的标准库中起着主导作用,并且是一种常见的抽象方法。Protocol 提供了与其他语言类似的接口功能。

面向对象编程和面向协议编程的区别:

1.介绍。

这里引用一个例子:

如果我们要开发一款赛车游戏,有不同的对象:汽车,飞机,摩托等等,为了能操作不同的设备,一种常见的实现方案是使用面向对象编程,将所有逻辑封装到基类,其它类继承自基类。因此,基类需要有驾驶、飞行等各种逻辑。

但是刚开始我们会创建不同的基类:汽车逻辑,飞机逻辑。。。但以后可能会出现,会飞的汽车,那么我这时候使用面向对象编程的话可能就需要额外的创建一个基类,这个基类应当同时继承汽车和飞机的基类逻辑,以此来实现汽车+飞机的逻辑,但是swift不支持多重继承,这时候,面向协议编程可以很好解决这一问题。

2.面向对象编程。

协议(protocol)允许将相似的方法、函数、属性放到一组。Swift 中的classenumstruct都可以遵守协议,但只有class支持继承。

与继承相比,协议的优势在于对象可以遵守多个协议。

在代理传值中,我们可以用定义代理协议。

// 定义代理协议
protocol DestinationViewControllerDelegate: AnyObject {
    func destinationViewController(_ controller: DestinationViewController, didPassMessage message: String)
}

同时我们可以extension扩展代理,为了避免与系统方法冲突,我们在定义方法时也可以加前缀。

参考:

https://github.com/pro648/tips/blob/master/sources/%E9%9D%A2%E5%90%91%E5%8D%8F%E8%AE%AE%E7%BC%96%E7%A8%8B.md

Swift系列三十三 - 面向协议编程 - 掘金

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值