Swift之协议的扩展

协议扩展解决的问题

在OOP(object-oriented programming,面向对象编程)中,过深的继承层次很容易让代码充满难以理解的类。改用泛型和协议,即使使用值类型,协议也能解决OOP中继承能解决的问题。

协议扩展要求

使用关键字extension

可以添加有实现的属性(计算属性)和方法,但不会增加协议的需求;

不能添加存储属性;

协议扩展内的实现只能访问其他肯定存在的属性和方法;

协议扩展的where子句

where子句可以为协议扩展增加一些限制,形式:

1
2
3
extension ProtocolName where condition {
//扩展内容
}

用协议扩展提供默认实现

可以利用协议扩展提供协议自身需求的默认实现。当协议为部分或所有属性或方法提供默认实现时,符合这个协议的类型就不需要进行实现。但是如果默认实现不合适,符合协议的类型也可以选择自己实现。