上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.2.3 类型擦除
但是在使用关联类型的时候需要注意,当声明一个使用了关联属性的协议对象作为属性时,会先出现no initializers的提示,接着会提示error: protocol 'HTNState' can only be used as a generic constraint because it has Self or associated type requirements。其意思是HTNState协议只能作为泛型约束使用,因为它包含了Self或关联类型。
代码如下:
class stateDelegate<T> { var state: T var delegate: HTNState }
那么这个问题该如何处理呢?答案是通过类型擦除来解决,添加一个中间层在代码中,让这个抽象的类型具体化。实际上在Swift的标准库里就有对类型擦除的运用,比如AnySequence协议。