2015-10-26 19 views
10

2つのプロトコル(ArchivableおよびSerializable)と複数のサブクラス化されたクラス(Model)があります。サブクラスの多くは、ArchivableまたはSerializable(またはその両方)のいずれかを実装します。私はArchivableSerializableの両方を実装するModelのすべての子に関数を定義したいと思います。これらの作業の両方:Swiftのプロトコル拡張オブジェクトがクラスでプロトコルに準拠する

extension Serializable where Self: Model { 
    func fetch() { ... } 
} 

または

extension Serializable where Self: Archivable { 
    func fetch() { ... } 
} 

は、しかし、私は両方のプロトコルが必要な場合に拡張する方法を見つけ出すことはできません。最初の2つに準拠した第3のプロトコルを作成する以外の方法はありますか?

答えて

23

私は、これは動作するはずだと思う:

extension Archivable where Self: Model, Self: Serializable { 

    func fetch() { ... } 

} 

...または他の方法で回避:

extension Serializable where Self: Model, Self: Archivable { 

    func fetch() { ... } 

} 
+0

ありがとうございました - これは私がまさに必要です。システムが私にできるようになると、答えとしてマークされます。 –

+0

それは素晴らしいヒントです! – Fattie

関連する問題