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:

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 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 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 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