Swift,Hashableプロトコルの準拠に関して。Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。登録してこのコミュニティに参加するどなたでも質問していただけますどなたでも回答していただけます最もよい回答には賛成票が入り、最上位に上がりますホーム質問タグユーザーSwift,Hashableプロトコルの準拠に関して。329件11自作したclassを集合を使った処理にかけたいです。}この部分が理解することが難しいので質問させていただきました。票1肝心の「自作したclass」に対する回答になっていなかったので、加筆修正しました。)Hashableのキモ(同様の機構を備える他の言語でも共通の考え方です)は、hashValueを使って、等しくなる可能性があるかどうかチェックするhashValueが等しくなければ、絶対に==にはならないhashValueが等しい場合には、実際に等しいかどうか==を使って確認すると言う使い方をするものだと言うことです。現在のSwiftの場合Hashableは以下のように定義されています。Hasher)}また、Equatableの定義は以下の通りです。Bool}(Swift言語自身のソースに入っているヘッダードキュメントにはすごく有用な内容が含まれているのですが、全部英語であることもあり、今回は割愛しました。)要は、1つのメソッド、1つのプロパティと1つの演算子を定義すればHashableプロトコルには準拠することができます。ハッシュ値を取得するプロパティhashValueハッシュ値を逐次計算するメソッドhash(into:)等値性を判定する演算子==現在のSwiftではhashValueにはデフォルト実装が用意されているため、hash(into:)と==さえ準備すればあなたの定義したstructやclassをHashableに適合させることができます。hash(into:)ではなく、hashValueを直接実装すると言うのは、かなり古いやり方です。新しい情報源を探した方が良いでしょう。)ここで1つ重要な点は、hashValueと==が整合性を保つためには、次の公理を満たしていなければいけない、と言うことです、。b.hashValueが成立する上に書いた定型的実装が、この公理を満たすことはすぐにはわかりにくいかもしれませんが、ちゃんと成立します。(長々と書いてもわかりやすく書ける自信がないので、ざっくりと端折らせていただきます。)ただし、現在のSwift(4.2以降)では、structとenumに対してはそのような定型的な処理を自分で書くことは滅多にありません。extensionとかを一切使わず、以下のようなstruct定義をどこかに書いて下さい。Int}Swiftコンパイラは、何もエラーや警告を出さすにGridPointをHashableな型として受け入れるでしょう。SetやDictionaryのKeyとしても使えます。hash(into:)および==の定義を作成してくれます。悩まず、どんどん活用しましょう。Hashableと言うのを付け加えなさいと言うことになります。深くその背景を知りたい、とか、自分の定義したデータ型ではうまくいかない、なんてことがあればコメント等でお知らせください。「集合を使った処理にかけたい」と言うのが目的なら、ちゃんとSetに使えるのもすぐに確認できるはずです。自作のclassの場合、あるいは==の動作を修正したい場合(ただし、NSObjectのサブクラスは除く。)上に書いたようにhash(into:)メソッドと==演算子を整合性を持つように実装しなければいけません。}}上に書いたようにまず自分が思う==を実装し、それに合わせてhash(into:)を実装します。}}NSObjectのサブクラスの場合NSObjectはデフォルトでHashableとなっていますが、hashValueと==のデフォルト実装が以下のように純Swiftクラスとは異なっています。hashValueのデフォルト実装は、NSObjectProtocol.hashを呼び出す==のデフォルト実装はNSObjectProtocol.isEqual(_:)を呼び出す従って、動作をカスタマイズする場合、hash(into:)ではなくhashプロパティを、==演算子ではなく、isEqual(_:)メソッドをオーバライドする必要があります。}}あなたの「自作したclass」の中身がわからないため、一般的なことしか書けなかったので少し見にくいかもしれません。「自作したclass」についてのご質問であればそのclassの定義を示していただいた方が、より適切な回答をより早く得られることにつながります。Hasher)の実装が必須なようです。一応質問は、クラスへのHashableの準拠ということですので。さん、実地に動作を確認してのご報告ありがとうございます。GridPointとコードにあったので「自作したclassを」の中のclassはちょっとゆるい意味で使っていると勘違いしていたのですが、そうじゃなくて、『「swiftリファレンスの翻訳版」にはこう書いてあるが、「自作したclassを」どうHashableに適合させるかわからない』と解釈する方が極めて自然な文面ですよね...。ご指摘の内容に合わせて回答を修正させていただきます。RawvalueをhashValueにしました。Rawvalueが等しい時にTrueを返すようにしました。ハッシュのキモを理解し、なんとかエラーも無く、要件通りの値を返してくれるようになりました。アドバイスありがとうございました。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。会を開催します🎉コメントで回答する理由を教えてくださいサイトの未翻訳箇所を見つけて、もくもく会で直しましょう関連する質問1OS-X:ViewControllerからAppDelegateに変数の値を渡したい。3.0を使用してJSONデータを取得する方法1プロトコルについて1storyboardの遷移でエラーが出ます。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。