StructureSwift

AnyHashable

A type-erased hashable value.

@frozen struct AnyHashable

Overview

The AnyHashable type forwards equality comparisons and hashing operations to an underlying hashable value, hiding the type of the wrapped value.

Where conversion using as or as? is possible between two types (such as Int and NSNumber), AnyHashable uses a canonical representation of the type-erased value so that instances wrapping the same value of either type compare as equal. For example, AnyHashable(42) compares as equal to AnyHashable(42 as NSNumber).

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] = [
    42: "an Int",
    43 as Int8: "an Int8",
    ["a", "b"] as Set: "a set of strings"
]
print(descriptions[42]!)                // prints "an Int"
print(descriptions[42 as Int8]!)        // prints "an Int"
print(descriptions[43 as Int8]!)        // prints "an Int8"
print(descriptions[44])                 // prints "nil"
print(descriptions[["a", "b"] as Set]!) // prints "a set of strings"

Note that AnyHashable does not guarantee that it preserves the hash encoding of wrapped values. Do not rely on AnyHashable generating such compatible hashes, as the hash encoding that it uses may change between any two releases of the standard library.

Members

Initializers

  • init<H>(H)

    Creates a type-erased hashable value that wraps the given instance.

Instance Properties

Instance Methods

Operators

Conforms To