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下的形态。