2016-04-16 15 views
0

Gibt es eine Möglichkeit, die folgenden in Swift zu schreiben. Ich kann anscheinend keine gute Alternative für den ungebundenen Wildcard-Typ "?" Finden. Vielleicht könnte dieses Muster in Swift anders gehandhabt werden.Schnelle generische ungebundene Wildcard Typ

class MyDefinition {} 

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

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

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

verwenden kann ich nicht sicher bin, was „dieses Muster“ wirklich ist. Was versuchst du zu erreichen? – jtbandes

Antwort

0

Wenn ich Frage richtig verstanden habe, können Sie definieren DefinitionBuilder als die associatedtype und Self wie folgt verwendet:

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() 

Hope, wird dies dazu beitragen.

0

Ich glaube, Sie nur

class DefinitionBuilder<B: DefinitionBuilder<AnyClass, T>, T> {} 
Verwandte Themen