在新的 Swift API 设计指南 中,常用的协议后缀
Type
被取消了。虽然对于独立的协议很容易做到这一点(例如将 SequenceType
更改为 Sequence
),但我不知道如何更新协议为实现提供基础的 API。以下是一些流行框架的示例:
- Result µframework 提供了
Result
,一个具体的成功/失败枚举,以及ResultType
,一个成功/失败类型的通用基础协议,Result
符合该协议。 - ReactiveCocoa 的主要类型是
Signal
和SignalProducer
,它们由SignalType
和SignalProducerType
支持。
在这两种情况下,大部分实现都在协议的扩展中,允许扩展使用类型约束的全部功能,并允许实现是通用的。这与具有 AnySequence
样式的类型擦除不同:你不会真正期望自己实现这些协议,或者统一不同的类型。