2016-11-15 3 views
0

をオーバーライド/複数回準拠/プロトコルへの再適合は、関連するタイプと、以下のプロトコルを考えます関連する型 'T'を変更できるように、サブクラス 'B'の 'P'への適合性をオーバーライドする方法はありますか?関連タイプ

class B: A, P { // Redundant conformance of 'B' to protocol 'P' 
    func f(t: Int) { 
     super.f("Hello") 
     print(2 * t) 
    } 
} 

BPに準拠していることを書くことは冗長であり、エラーを返します。 Bはプロトコルに2回準拠していますが、サブクラス化を行わなくても不可能です。

このような機能があると思われるのは、です。これができない理由がありますか?

編集:持っているどのような方法があるかどうか私は何を求めていることである

AP<T>こととBはすなわち、AのサブクラスであるP<U>でもB場合も関連したタイプをオーバーライドします。

+1

あなたのサブクラスでは、すでに –

+1

@andそれをやることが必要、プロトコルの採用を継承していませんはい、しかし、私が求めているのは、 'A'を' A'のサブクラスであっても、 'A'を 'P 'と 'B' 'P 'にする方法があればです。 –

答えて

0

あなたのサブクラスは既にそのスーパークラスからプロトコルの採用を継承しているので、サブクラスのプロトコルの適合性を上書きする必要はありません。

理由:protocol Pclass Bを準拠した後

protocol P { 
    var name:String{get set} 
} 


class A:P { 

    var name:String = "Swift" 

} 
class B:A { 

    override var name:String{ 
     get{ 
      return "Hello" 
     }set{ 

     } 
    } 
} 

プロパティとmethods.In正常な例を実装する必要があります、コンパイラは 必要なメソッドとプロパティを追加するために警告を表示します。..

しかし、もしこの場合に起こります。オーバーライドされたものと名前が矛盾します。これが起こらないようにしてください。

プロトコルに再準拠

+0

..あなたは、メソッドや変数をオーバーライドする場合は、再度、なぜそのため、名前の競合のため –

+0

オーバーライドキーワードを使わずに基本クラスの中でプロトコルメソッドを使うことができないので、方法がないと思います。あなたの 'func f(t:Int)'は、クラスAのクラスやプロトコルPからではなく、クラスBの独自のメソッドです –

関連する問題