知识卡片
实现最小运算符换取整族比较能力
内容
自定义类型要支持==比较,只需符合Equatable并实现一个静态方法==;一旦有了==,标准库就基于它自动提供!=,不用另外实现。Comparable同理:只需实现<一个运算符,标准库就基于<和==自动派生出>、>=、<=。这是[[协议扩展提供默认实现替代继承共享代码]]的具体应用——协议只要求实现一个最小充分的核心操作,其余可以从这个核心操作逻辑推导出的行为,交给协议扩展统一派生,遵从者不用逐个手写。这种”实现最小核心接口,其余免费获得”的模式在标准库里反复出现,背后的设计动机是减少重复实现同一逻辑(!=永远等于!(a == b))带来的不一致风险——只维护一处判断逻辑,其余表达式的正确性由编译器保证。
参考来源
《Swift编程权威指南》第25章《Equatable和Comparable》