2016-05-06 2 views
0

Ich versuche, ein Objekt einer Klasse mit einem Typ-Parametern in ein Objekt der gleichen Klasse mit einem generischen Typparameter zu werfen,:Swift: wie im folgenden Swift Code dargestellt Vererbung in Typ-Parameter

class ParameterClassA { 
} 

class ParameterClassB: ParameterClassA { 
} 

class WorkingClassA<T> { 
} 

class WorkingClassB: WorkingClassA<ParameterClassB> { 
} 

let object1 = WorkingClassB() 
let object2: WorkingClassA<ParameterClassA> = object1 

Leider und vielleicht wie erwartet, das funktioniert nicht, weil nicht in WorkingClassA<ParameterClassA> "downcast" sein kann - Ich weiß, dass Java es nicht erlaubt, ich hatte gehofft Swift könnte besser in der Lage sein, solche Konstrukte zu unterstützen.

Gibt es einen anderen Weg dies zu tun ist Swift, oder ist es einfach inakzeptabel? Mir scheint es gut, den Typparameter "upcast", aber es gibt gute Gründe, es nicht zuzulassen?

Danke!

Antwort

0

So bequem wie diese Art von Sache sein könnte, ist es nicht wirklich, was Generika tun sollen.

Für den Compiler hat jeder generische Typ einen anderen Typ und ist (derzeit) nicht verwandt mit den generischen Typen desselben Typs. Das bedeutet WorkingClassA<ParameterClassB> zu WorkingClassA<ParameterClassA> Casting ist nicht anders als Gießen WorkingClassA<ParameterClassB> zu WorkingClassA<String> oder WorkingClassA<Int>

Verwandte Themen