2016-07-16 20 views
1

Wie können wir in Swift einchecken, dass ein generischer Typ von einem anderen geerbt wird?Wie überprüft man, ob ein generischer Typ eine Unterklasse eines anderen generischen Typs in Swift ist?

Ich habe diesen Code:

class Style<U: Styleable> { 
    ... 
    init<V: Styleable>(_ style: Style<V>) { 
     ... 
    } 
} 

ich brauche, um sicherzustellen, innerhalb dieser init, dass es nur aufgerufen werden, wenn U Unterklasse von V ist. Ich kenne keine Möglichkeit, dies zur Kompilierzeit zu überprüfen - Swift erlaubt es (noch nicht, vielleicht?), Einen generischen Typ auf eine Unterklasse eines anderen zu beschränken. Das einzige, was ich tun kann, ist, einige Behauptungen zu verwenden, so dass das Programm abgestürzt ist, wenn es falsch verwendet wird.

Haben Sie Vorschläge, wie Sie das lösen können?

+0

@MartinR: Ich gab das falsche Beispiel. Das eigentliche Problem, das ich zu lösen versuchte, war ein bisschen schwieriger. Bitte überprüfen Sie die bearbeitete Frage. –

Antwort

1

Nun, ich finde eine Antwort. Es war so nah: assert(U.self is V.Type)

+0

Das ist eine Laufzeitprüfung für eine Kompilierungszeitanweisung. Es funktioniert, aber zu spät. –

Verwandte Themen