【ざっくり解説】Hashableとは? – Swiftを理解する

Swift

今回はHashableプロトコルについて説明していきます。

そもそもHashとは?

一般的にHash(ハッシュ値)とは一つ一つのデータを識別したり比較するために与えられる、一意の文字列または数字です。
ハッシュ値は以下の2つの性質を持つ必要があります。

  • 一意性:異なるデータには異なるハッシュ値が与えられる
  • 不可逆性:ハッシュ値から元のデータに変換することはできない

以上のような性質から、ハッシュ値はデータの改竄や破損検知、整合性チェックなどに使われます。

じゃあHashableとは?

Hashableとは Hash + able(可能) =「ハッシュ値の使用ができる」ということです。XcodeでHashableの定義を見てみると、hashValueというプロパティとhashというメソッドを持っていることを確認できます。

コメントを読んでみると、

`hashValue`は` Hashable`要件として非推奨になりました。 `Hashable`に準拠するには、代わりに` hash(into:) `要件を実装します。

とのことで、hashValueは非推奨になったようですね。

Hashableへの準拠が必要なパターン

ハッシュ値を用いた処理が必要な型の場合は、その型をHashableに準拠させる必要があります。例えばDictionary、ForEach、Setなどではハッシュ値を使用します。それぞれについてみてみましょう。

それぞれ、Key,ID,ElementがHashableなことがわかりますね。

DictionaryのKeyに設定したり、ForEachでidを使用して処理を回したり、Setに格納する場合は以下のようにHashableに準拠させるようにしましょう。

struct Person: Hashable {
    let name: String
    let age: Int
}

参考サイト

以下のサイトを参考にさせていただきました。ありがとうございます。

Hashable | Apple Developer Documentation
A type that can be hashed into a to produce an integer hash value.
Hashable - Qiita
Hashableプロトコルのリファレンスの意訳です。概要この型は整数のハッシュ値を提供します。Hashableプロトコルに準拠する型は辞書のキーや集合で使うことができます。標準ライブラリの多く…

コメント