类型擦除
类型擦除
但是在使用关联类型的时候需要注意当声明一个使用了关联属性的协议作为属性时,比如下面的代码:
class stateDelegate<T> {
var state: T
var delegate: HTNState
}
<> { varvar 先会提示 no initializers 的错误,接着会提示 error: protocol ‘HTNState’ can only be used as a generic constraint because it has Self or associated type requirements 。意思是 HTNState 协议只能作为泛型约束来用,因为它里面包含必需的 self 或者关联类型。 那么该如何处理呢?这里需要通过类型擦除来解决,主要思路就是加个中间层在代码中让这个抽象的类型具体化。实际上在 Swift 的标准库里就有类型擦除很好的运用,比如 AnySequence 的协议。
https://ming1016.github.io/2018/01/24/why-swift/ |
我思故我在