Swift での配列型および関数パラメータとしてのプロトコルの使用 質問する

Swift での配列型および関数パラメータとしてのプロトコルの使用 質問する

特定のプロトコルに準拠したオブジェクトを格納できるクラスを作成したいと考えています。オブジェクトは型付き配列に格納する必要があります。Swift のドキュメントによると、プロトコルは型として使用できます。 

プロトコルは型であるため、他の型が許可されている多くの場所で使用できます。たとえば、次のようになります。

  • 関数、メソッド、または初期化子のパラメータ型または戻り値型として
  • 定数、変数、またはプロパティの型として
  • 配列、辞書、その他のコンテナ内の項目の型として

ただし、次の場合はコンパイラ エラーが発生します。

プロトコル 'SomeProtocol' は、Self または関連する型要件があるため、汎用制約としてのみ使用できます。

これをどう解決すればいいのでしょうか:

protocol SomeProtocol: Equatable {
    func bla()
}

class SomeClass {
    
    var protocols = [SomeProtocol]()
    
    func addElement(element: SomeProtocol) {
        self.protocols.append(element)
    }
    
    func removeElement(element: SomeProtocol) {
        if let index = find(self.protocols, element) {
            self.protocols.removeAtIndex(index)
        }
    }
}

ベストアンサー1

Swift のプロトコルに関する問題のバリエーションに遭遇しましたが、これに対する適切な解決策はまだ存在しません。

参照Swift で配列を拡張してソートされているかどうかを確認しますか?、そこにはあなたの特定の問題に適した回避策の提案が含まれています (あなたの質問は非常に一般的なので、これらの回答を使用して回避策を見つけることができるかもしれません)。

おすすめ記事