Hashable
Hashable is protocol
public protocol Hashable : Equatable {
var hashValue: Int { get }
func hash(into hasher: inout Hasher)
}
AnyHashable
AnyHashable is struct
遵循Hashable protocol
;
public struct AnyHashable {
public init<H>(_ base: H) where H : Hashable
public var base: Any { get }
public static func != (lhs: AnyHashable, rhs: AnyHashable) -> Bool
}
extension AnyHashable : Equatable {
}
AnyHashable是调和objc和Swift的产物
典型的场景是,objc下无泛型的NSDictionary
到了Swift下,会变成什么?(典型例子是苹果来的推送消息)
[Any: Any]
,这肯定不对,key必须有hash值,
[AnyObject: Any]
,这也不对,同样的AnyObject
也未必有hash值
大一统一的理论来了,那就是AnyHashable
这个Struct
[AnyHashable: Any]
就是NSDictionary
在Swift下的形态。