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

 

posted @ 2019-03-13 18:13  zzfx  阅读(767)  评论(0编辑  收藏  举报