一、共同点

本质都是抽取不同类的共同方法和属性(声明),供遵循协议的类或对象使用。

都可以通过定义协议实例deleagate,来实现委托代理模式。

PS:类比继承的概念,继承父类的方式比较险隘,子类和父类只能为同一基类,且方法都有实现,需在子类中override,并不能把方法和属性完全独立出来,且不能多继承。

二、区别(核心)

OC中的协议:

1、更单纯的受限于委托代理的含义,多用于跨类的传值和回调通知。

Swift的协议:

1、Swift可以通过协议 extension 扩展,缺省实现协议的方法(OC不行)。

2、定义属性方法

3、Swift是面向协议编程,其思想是通过抽取不同类中的相同方法和属性,实现模块化减少耦合。

4、Swift的协议不需要单独声明协议对象(**id delegate **)和指定代理( delegate = self ),只需要遵循协议的类实现声明,或使用协议的缺省实现。

三、为何说Swift是面向协议协议编程?

传统的协议(比如Objective-C的protocol)只能定义接口,不能复用实现,遵守同一个协议的不同的类,只能分别实现协议接口,使用场景受限了很多。
Swift只是多了一个协议扩展的特性,但却带来了编程范式的进化。