今回はHashable
プロトコルについて説明していきます。
そもそもHashとは?
一般的にHash(ハッシュ値)とは一つ一つのデータを識別したり比較するために与えられる、一意の文字列または数字です。
ハッシュ値は以下の2つの性質を持つ必要があります。
- 一意性:異なるデータには異なるハッシュ値が与えられる
- 不可逆性:ハッシュ値から元のデータに変換することはできない
以上のような性質から、ハッシュ値はデータの改竄や破損検知、整合性チェックなどに使われます。
じゃあ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プロトコルに準拠する型は辞書のキーや集合で使うことができます。標準ライブラリの多く…
コメント