Swiftは、この回答が書かれてから数年で大幅に成熟しました。設計ガイドラインには次のように記載されています。
これを見つけてくれたDavid Jamesに感謝します!
元の回答
型システム内でエンコードできない重要な概念を表すために、何らかの形式のハンガリー記法を使用することは良い考えです。ただし、一部の識別子がプロトコルを参照するという事実は、Swift(およびC#)の型システムの一部であり、したがって、プレフィックスまたはサフィックスはノイズを追加するだけです。例外やイベントなどの概念には、明確な接頭辞または接尾辞が適しています。
Swiftの公式スタイルガイドがない場合、独自のガイドを作成するか、既存のガイドまたはコードを借用する必要があります。たとえば、CocoaのObjective-Cスタイルガイドには次のセクションが含まれています。
プロトコルは、動作をグループ化する方法に従って名前を付ける必要があります。
ほとんどのプロトコルは、特定のクラスに関連付けられていない関連メソッドをグループ化します。このタイプのプロトコルは、プロトコルがクラスと混同されないように名前を付ける必要があります。一般的な規則は、動名詞(「... ing」)形式を使用することです。
NSLocking
- 良い。
NSLock
–悪い(クラスの名前のようです)。
一部のプロトコルでは、いくつかの別個の小さなプロトコルを作成するのではなく、多数の無関係なメソッドをグループ化します。これらのプロトコルは、プロトコルの主要な表現であるクラスに関連付けられる傾向があります。これらの場合、規約はプロトコルにクラスと同じ名前を付けることです。
この種のプロトコルの例は、NSObject
プロトコルです。このプロトコルは、クラス階層内でのオブジェクトの位置に関するオブジェクトのクエリ、特定のメソッドの呼び出し、および参照カウントのインクリメントまたはデクリメントに使用できるメソッドをグループ化します。NSObject
クラスはこれらのメソッドの主要な表現を提供するため、プロトコルはクラスにちなんで命名されます。
ただし、2番目のポイントのアドバイスは適用されなくなりました。
クラスとプロトコルの名前空間はSwiftで統一されているNSObject
ため、Objective-CのプロトコルはSwiftで再マッピングさNSObjectProtocol
れます。(ソース)
ここでは…Protocol
、プロトコルをクラスから明確にするためにサフィックスが使用されました。
スウィフト標準ライブラリのプロトコルが含まれているEquatable
、Comparable
とPrintable
。これらはCocoaの「…ing」形式ではなく、「…able」サフィックスを使用して、このタイプのインスタンスが特定の操作をサポートする必要があることを宣言します。
結論
プロトコルに関連する実装が1つしかないいくつかのケースでは、クラスとプロトコルが同じ名前を持つことができるように、「…Protocol」サフィックスが意味をなすことがあります。ただし、これはそのような場合にのみ制限する必要があります。
それ以外の場合、名前はこのプロトコルに含まれる操作を反映する名詞にする必要があります。「…ing」または「…able」形式の動詞を使用することは出発点として適切であり、そのような名前はクラス名と競合する可能性は低いです。
名前EquatableProtocol
はお勧めできません。名前Equatable
またはEquating
はるかに良いだろう、と私はすべてのクラスが名前を持つことを期待しないでくださいEquatable
。この場合、Protocol
接尾辞はノイズです。