AnyHashable类型擦除的原因:set和dictory需要指定一个确定的类型
AnyHashable 属于无关联类型的擦除。
将具体类型的类型信息擦除掉了,只剩下协议类型的信息暴露出来。
类型擦除实践:将相同协议的不同实现屏蔽起来,暴露出类型的共同特征(协议接口)。
A type-erased hashable value.
public struct AnyHashable {
public init<H>(_ base: H) where H : Hashable
public var base: Any { get }
public static func == (lhs: AnyHashable, rhs: AnyHashable) -> Bool
}
let descriptions: [AnyHashable: Any] = [
AnyHashable("😄"): "emoji",
AnyHashable(42): "an Int",
AnyHashable(Int8(43)): "an Int8",
AnyHashable(Set(["a", "b"])): "a set of strings"
]
public struct Dictionary<Key, Value> where Key : Hashable
Key通常要指定一个确定的类型,如果类型不统一,向上抽象;向上无法解决问题,使用AnyHashable
我思故我在