知识卡片

协议作为类型让代理模式不依赖具体实现

专业/工作 · 726

内容

协议本身不实现任何功能,却可以像 Int、String 一样被用作变量、参数、返回值、数组元素的类型,持有一个协议类型的属性意味着”我不关心你具体是哪个类,只要求你满足这套能力”。委托(代理)模式正是靠这一点搭起来的:一个类把某些工作委托协议类型的属性去完成,只依赖协议定义的方法签名,完全不知道、也不需要知道被委托方到底是哪个具体类型,被委托方随时可以换成任何遵循该协议的新实现而不影响委托方一行代码。发散:这就是”针对接口编程而非针对实现编程”在 Swift 里的落地方式,协议在这里既是类型约束的语法工具,也是解耦两个类之间直接依赖关系的设计手段。

参考来源

《Swift全解析:新式iOS实战开发》第20章《Swift协议》