継承

2017-02-06 7 views
0

(handleSuccessは基本パラメータと子パラメータを持つ関数を持っています)コンパイルエラーがあります:継承

Type 'Xyz' does not conform to protocol 'SuperDelegate' 

。それらを解決する方法? ChildOfSuperDelegateメソッドのみを実装する最良の方法は何ですか、クラス "A"はSuperDelegate変数を使用します。

私はプロトコルで継承のように思えるようにジェネリック型を使用する必要があります。

+0

パラメータの型はプロトコル間で異なっている、あなたの 'delegate'は、それが' BaseRsp'を取る方法 'handleSuccess'を持っていることを言いますが、' Xyz'まあ –

+0

パラメータ'ChildOfBaseRsp'を取るこ​​としかできないと言っています。これが安全に動作する方法はありません。 'Xyz'は' func handleSuccess(rsp:BaseRsp) 'の要求を単に満たすものではありません。 – Hamish

+0

私は知っています。しかし、それらを解決するには、私はsuperDelegateを持っていなければならず、プロトコルで継承のように思うのですが、ジェネリック型は良い考えですか? – luky0007

答えて

0

ここで、あなたのプロトコルChildOfSuperDelegateはSuperDelegateから継承されています。プロトコルではありますが、そのメソッドは実装されていません。しかし、ChildOfSuperDelegateから継承するときは、SuperDelegateのメソッドをChildOfSuperDelegateと同様に実装する必要があります。

ので、このようにします:

class Xyz:ChildOfSuperDelegate{ 
    func handleSuccess(rsp: BaseRsp) { 
    //do stuff 
    } 

func handleSuccess(rsp: ChildOfBaseRsp){ 
    print("Great!") 
    } 
} 
+0

**私はそれを知っています。それは私が探しているのではない**。私はpoliformism、f.ex: 'delegate.handleSuccess(rspChildOfBaseRspObj)またはdelegate.handleSuccess(anotherChild)'を使ってプロトコル関数を呼び出したいですが、私の代理人はオブジェクトがSuperDelegate(only)を実装しています。だから、プロトコルがなぜpolimorphic metodsを持たないのか、そしてwalkarounds – luky0007