struct AnyHashable A type-erased hashable value. Inheritance CustomDebugStringConvertible, CustomReflectable, CustomStringConvertible, Equatable, Hashable The AnyHashable type forwards equality comparisons and hashing operations to an underlying hashable value, hiding its specific underlying type. You can store mixed-type keys in dictionaries and other collections that require Hashable conformance by wrapping mixed-type keys in AnyHashable instances: let descriptions: [AnyHashable: Any] = [ AnyHashable("😄"): "emoji", AnyHashable(42): "an Int", AnyHashable(Int8(43)): "an Int8", AnyHashable(Set(["a", "b"])): "a set of strings" ] print(descriptions[AnyHashable(42)]!) // prints "an Int" print(descriptions[AnyHashable(45)]) // prints "nil" print(descriptions[AnyHashable(Int8(43))]!) // prints "an Int8" print(descriptions[AnyHashable(Set(["a", "b"]))]!) // prints "a set of strings" Initializers init init(_:) Required Creates a type-erased hashable value that wraps the given instance. Parameter base: A hashable value to wrap. Declaration public init<H>(_ base: H) where H: Hashable Instance Variables var base Required The value wrapped by this instance. The base property can be cast back to its original type using one of the casting operators (as?, as!, or as). let anyMessage = AnyHashable("Hello world!") if let unwrappedMessage = anyMessage.base as? String { print(unwrappedMessage) } // Prints "Hello world!" Declaration var base: Any var customMirror Required The custom mirror for this instance. If this type has value semantics, the mirror should be unaffected by subsequent mutations of the instance. Declaration var customMirror: Mirror var debugDescription Required A textual representation of this instance, suitable for debugging. Calling this property directly is discouraged. Instead, convert an instance of any type to a string by using the String(reflecting:) initializer. This initializer works with any type, and uses the custom debugDescription property for types that conform to CustomDebugStringConvertible: struct Point: CustomDebugStringConvertible { let x: Int, y: Int var debugDescription: String { return "(\(x), \(y))" } } let p = Point(x: 21, y: 30) let s = String(reflecting: p) print(s) // Prints "(21, 30)" The conversion of p to a string in the assignment to s uses the Point type's debugDescription property. Declaration var debugDescription: String var description Required A textual representation of this instance. Calling this property directly is discouraged. Instead, convert an instance of any type to a string by using the String(describing:) initializer. This initializer works with any type, and uses the custom description property for types that conform to CustomStringConvertible: struct Point: CustomStringConvertible { let x: Int, y: Int var description: String { return "(\(x), \(y))" } } let p = Point(x: 21, y: 30) let s = String(describing: p) print(s) // Prints "(21, 30)" The conversion of p to a string in the assignment to s uses the Point type's description property. Declaration var description: String var hashValue Required The hash value. Declaration var hashValue: Int Instance Methods func hash(into hasher: inout Hasher) Required Hashes the essential components of this value by feeding them into the given hasher. Parameter hasher: The hasher to use when combining the components of this instance. Declaration public func hash(into hasher: inout Hasher) Type Methods func !=(lhs: Self, rhs: Self) -> Bool Required Declaration public static func !=(lhs: Self, rhs: Self) -> Bool func ==(lhs: AnyHashable, rhs: AnyHashable) -> Bool Required Returns a Boolean value indicating whether two type-erased hashable instances wrap the same type and value. Two instances of AnyHashable compare as equal if and only if the underlying types have the same conformance to the Equatable protocol and the underlying values compare as equal. Declaration public static func ==(lhs: AnyHashable, rhs: AnyHashable) -> Bool