2016-02-12 11 views
6

私はこれをやろうとしているが、私はいくつかのトラブルスウィフトジェネリック延期問題

これは

protocol CustomProtocol { 

} 

SubCustomProtocol

protocol SubCustomProtocol: CustomProtocol { 

} 

SubCustomProtocolImplementation

class SubCustomProtocolImplementation: SubCustomProtocol { 

} 
CustomProtocol

ですが取得しています

これはCustomClass

class CustomClass<P: CustomProtocol> { 

    var customProtocol: P? 

    func doSomething() { 

    } 

} 

SubCustomClass

class SubCustomClass<P: SubCustomProtocol>: CustomSubClass { 

} 

そして、私のBaseViewController

class BaseViewController<P: CustomProtocol, T: CustomClass<P>>: UIViewController { 

    var foo: T! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     foo?.doSomething() 
    } 
} 

私のViewController私がfooを呼び出すラインで

class ViewController<P: SubCustomProtocolImplementation, T: SubCustomClass<P>>: BaseViewController<P,T> { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
} 

ある?.doSomething()それを言う「T」が「> 『』 CustomClass < P」のサブタイプではないことと、私は私が間違って

をやっているかわからないとのViewController宣言ではBaseViewController TがCustomClassから継承 が必要です」と述べています< 'P'>「

お手伝いできますか?

+0

このエラーは発生しません。少なくとも遊び場で。あなたは完全な文脈を提供していますか? – iyuna

+0

@イユーナ私は何かを残していた申し訳ありません!私は質問 –

+1

を編集しました。型パラメータはジェネリッククラスによって制約を受けることはできません。クラスまたはプロトコルによって制約される可能性があります。 – CouchDeveloper

答えて

2

foo varタイプをCustomClass<P>と指定する場合は、代わりに次のようにします。

class ViewController<P: CustomProtocol>: UIViewController { 

    var foo: CustomClass<P>? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     foo?.doSomething() 
    } 
} 
+0

ありがとう、私はそれをとてもうまく説明していなかった、私は再び私の質問を編集した –