https://juejin.cn/post/7016522510355136526?from=search-suggest
在 Swift 中,Type Erasure(类型擦除)是一种技术,主要用于解决泛型协议中的存储问题。泛型协议通常会引入类型参数,导致协议无法直接作为具体类型来使用,而是需要进行类型擦除,将泛型类型“擦除”为一个具体的、无关类型,隐藏类型参数的细节,使得协议可以作为具体类型进行存储、传递和使用。
1. 什么是 Type Erasure?
**类型擦除(Type Erasure)**的核心思想就是将泛型类型封装成一个类型擦除对象,该对象不再暴露泛型类型的具体实现细节,而是保留协议的接口。这样一来,泛型类型就可以与其它类型协作,像普通的类型一样被存储和操作。
在 Swift 中,使用类型擦除可以将泛型协议封装成一个固定类型,隐藏类型的具体细节,使得协议的使用更加灵活。
2. Thunk 技术与 Type Erasure
Thunk 技术通常指的是为了兼容或解决某些运行时问题,在方法或函数调用中插入一个额外的封装层。我们在做类型擦除时,实际上是通过插入额外的封装(例如通过封装一个具体类型)来解决泛型类型带来的问题。
3. Type Erasure 的应用场景
在 Swift 中,泛型协议通常无法直接作为类型使用,因为协议的类型参数不确定。然而,我们可以通过类型擦除来创建一个封装类型,这个封装类型可以将泛型协议转换为一个具体类型,从而使得我们可以处理这些类型。
4. Type Erasure 的具体实现
我们通过一个具体的例