之前一个帖子我总结了自己秋招面试经历,作为一个Swift开发者,有一个非常高频的问题就是:你觉得Swift相比于其他语言(或者OC来说)的特点和优势是什么?作为一个见识短浅的小白来说,这个问题实在是不知如何下手啊。这篇文章,也只是从一个小的角度切入,谈一谈Swift中的协议Protocol 和 Protocol Oriented Programming。
面向协议编程 (Protocol Oriented Programming) 是 Apple 在 2015 年 WWDC 上提出的 Swift 的一种编程范式。下面将从Protocol的基本用法开始讲起,最后再分析Protocol在降低代码耦合性方面的优势
Protocol - 协议基本用法
《 The Swift Programming Language 》
Protocol 基础语法
- 属性要求 :
- { get set } :指定读写属性
- static/class:指定类型属性
- 方法要求:
- static/class:指定类方法
- mutating:要求实现可变方法(针对值类型的实例方法,可以在该方法中修改它所属的实例以及实例的任意属性的值)
- 构造器要求:
- 在遵循协议的类中,必须使用
required
关键字修饰,保证其子类也必须提供该构造器的实现。(除非有final
修饰的类,可以不用required
,因为不会再有子类)
Protocol 作为类型
- 作为类型:代表遵循了该协议的某个实例(实际上就是某个实例遵循了协议)
- 协议类型的集合:
let A: [someProtocol]
,遵守某个协议的实例的集合 - Delegate 委托设计模式:定义协议来封装那些需要被委托的功能
Protocol 间的关系
- 协议的继承:协议可继承
- 协议的合成:使用
&
关键字,同时遵循多个协议 - 协议的一致性:使用
is
、as?
、as!
进行一致性检查 - 类专属协议:协议继承时使用
class
关键字,限制该协议职能被类继承
optional & @objc 关键字
可选协议:使用optional
修饰属性、函数、协议本身,同时所有option
必须被@objc
修饰,协议本身也必须使用@objc
,只能被Objective-C的类或者@objc
的类使用