2016-08-06 12 views
1

Sagen wir, ich habe zwei Klassen: FirstViewController und SecondViewController.Geben Sie eine Instanz einer Klasse ein

self.tabBarController?.viewControllers![0] kann eine Instanz von einem dieser beiden sein.

Dieses ist kein Problem:

let firstVC = self.tabBarController?.viewControllers![0] as! FirstViewController 

Aber dieses gibt Fehler "classOfVC ist kein Typ":

let aVC = self.tabBarController?.viewControllers![0]   
    let classOfVC = object_getClass(aVC)  
    let myVC = aVC as! classOfVC 

Irgendwelche Vorschläge?

Edit: Ich möchte nicht isKindOfClass verwenden, weil ich versuche zu vermeiden, wenn ... sonst wenn ... und da gibt es mehr als zwei Klassen. Welche Klasse

let aVC = self.tabBarController?.viewControllers![0] 
if avc.isKindOfClass(FirstViewController) { 
    //type of first ViewController 
} 
else if avc.isKindOfClass(SecondViewController) { 
    //type of second ViewController 
} 
+1

Der Meta-Typ 'classOfVC' ist erst zur Laufzeit bekannt, aber der Compiler benötigt einen statischen Typ für' myVC', weshalb das, was Sie versuchen, nicht so viel Sinn macht. Was ist das eigentliche Problem, das Sie versuchen zu lösen? Diese Fragen und Antworten können relevant sein: http://StackOverflow.com/Questions/38792315/Class-Casting-Dynamical-in-Swift – Hamish

Antwort

1

Typ Cast-Operator (as? oder as!)

+0

Es machte jetzt Sinn. Vielen Dank! – user523234

1

können Sie isKindOfClass verwenden, um die Aufgabe zu überprüfen, ist Zeit Betreiber zusammenzustellen. Der Typ einer Variablen in Swift kann nicht dynamisch sein, wie Sie es mit Ihrer Besetzung erreichen möchten.

Sie können nicht ohne weiteres vermeiden if let, guard usw. In Ihrem Ihrem Fall können Sie eine explizite Umwandlung tun (as!), wenn Sie diese Ansicht-Controller an bestimmten Index wissen nie ändert. Aber es ist keine empfohlene Vorgehensweise, normalerweise sollten Sie vermeiden, explizites Casting zu verwenden.

+0

Ich versuche zu vermeiden, wenn ... sonst, wenn ... Siehe meine Edit. – user523234

+0

Ich endete mit isKindOfclass. – user523234

Verwandte Themen