定义一个协议时,有时在协议定义里声明一个或多个关联类型是很有用的。关联类型给协议中用到的类型一个占位符名称。直到采纳协议时,才指定用于该关联类型的实际类型。关联类型通过 associatedtype 关键字指定。
举个例子:
1 | protocol Eat { |
我们定义了一个 Person,它每天都得吃饭,我们要求它遵循吃饭的协议 Eat,并实现了其中的 eat 方法。在协议 Eat 中我们声明了一个关联类型 FoodType。当 Person 的实例去调用 eat 方法时,我们使用泛型类型去指定之前的占位符 FoodType,那么我们就能清晰地知道 Person 的实例到底吃的是什么。
1 | let p = Person<Food>() |