Swift中的Hashable和AnyHashable

1,861 阅读1分钟

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