知识卡片

关联类型是协议里的泛型占位符

专业/工作 · 724.b

内容

函数和结构体的泛型占位符 <T> 在调用/实例化那一刻就要被填入具体类型;协议想表达同样的”暂不确定,由遵循者决定”却不能这么写,因为协议本身不产生实例,于是用 typealias 声明一个关联类型占位符(如”容器”协议里的”项的类型”),协议的方法签名、属性、下标都可以引用这个占位符,具体遵循协议的类型在实现时才把它填成确定类型(既可以直接 typealias 成 Int 写死,也可以自己是泛型类型、把占位符继续开放给外部)。这让协议可以描述”一组操作面向某种尚未确定但内部保持一致的类型”,比协议方法直接写死具体类型灵活得多,也是数组能通过扩展遵循同一个自定义容器协议的原因。

参考来源

《Swift全解析:新式iOS实战开发》第18章《Swift泛型》