web-dev-qa-db-ja.com

「Protocol ...は、自己または関連するタイプの要件があるため、汎用制約としてのみ使用できます」とはどういう意味ですか?

私はSwiftのカスタムプロトコルをキーとする辞書(実際には HashSet )を作成しようとしていますが、タイトルにエラーがあります:

プロトコル「myProtocol」は、Selfまたは関連するタイプの要件があるため、汎用制約としてのみ使用できます

頭も尻尾も作れません.

protocol Observing: Hashable { }

var observers = HashSet<Observing>()
115
devios1

プロトコルObservingはプロトコルHashableを継承し、プロトコルEquatableはプロトコルEquatableを継承します。プロトコルSelfには次の要件があります。

func ==(lhs: Self, rhs: Self) -> Bool

また、-VARIABLE--を含むプロトコルは、その内部のどこかで、型制約以外では使用できません。

ここ も同様の質問です。

80
newacct

これを解決するには、ジェネリックを使用できます。この例を考えてみましょう:

class GenericClass<T: Observing> {
   var observers = HashSet<T>()
}
8
ph1lb4