2016-04-16 11 views
0

は、スウィフトに次のように記述する方法はあります。私は結合していないワイルドカードタイプのために良い選択肢を見つけることができないよう「?」。たぶん、このパターンは、スウィフトに異なる方法で処理することができます。私が正しく質問を理解していればスウィフトジェネリック結合していないワイルドカードタイプ

class MyDefinition {} 

class DefinitionBuilder<B: DefinitionBuilder<?, T>, T> {} 

class ObjectDefinitionBuilder<B: ObjectDefinitionBuilder<?, T>, T>: DefinitionBuilder<B, T> {} 

class MyDefinitionBuilder: ObjectDefinitionBuilder<MyDefinitionBuilder, MyDefinition> {} 
+1

を使用することができると信じています。あなたは何を達成しようとしていますか? – jtbandes

答えて

0

、あなたがこのようなassociatedtypeSelfを使用するDefinitionBuilder として定義することができます。

class MyDefinition { 
    var a: Int = 0 
} 

protocol DefinitionBuilder { 
    associatedtype T 

    func withA(a: Int) -> Self 

    func build() -> T 
} 

protocol ObjectDefinitionBuilder: DefinitionBuilder { 

} 

class MyDefinitionBuilder: ObjectDefinitionBuilder { 

    private var _def = MyDefinition() 

    func withA(a: Int) -> Self { 
     _def.a = a 
     return self 
    } 

    func build() -> MyDefinition { 
     return _def 
    } 
} 

let definition = MyDefinitionBuilder().withA(5).build() 

希望を、これは役立ちます。

0

私はちょうど私が「このパターンは」本当に何であるかわからないんだけど

class DefinitionBuilder<B: DefinitionBuilder<AnyClass, T>, T> {} 
関連する問題