2017-01-16 3 views
0
extension UIViewController { 
    func getChildViewController<T>(OfType: T) { 
     let classType = Mirror(reflecting: self.childViewControllers.first).subjectType 

     if classType == T.self { 
      print("there is a match") 
     } 
    } 
} 

Vergleich, und wenn Sie diese Funktion aufrufen, Sie geben es eine Art zum Beispiel:Viewcontroller auf einen Typ in schnellen

ViewController.getChildViewController(OfType: SecondViewController.self) 

Dies wird überprüfen, ob das erste Kind view-Controller, wenn der Typ SecondViewController

Aber in der if-Anweisung erhalte ich die Fehlermeldung:

Binary operator '==' cannot be applied to operands of type 'Any.Type' and 'T' 
+0

Ich irgendwie erfolgreich kompiliert dies in Swift 3. – Sweeper

Antwort

0

Gerade werfen musste es so: any.Type

let passedType = ofType as? Any.Type 
if classType == passedType { 
    print("there is a match") 
} 
1

Sie rufen nur das generische Objekt auf, wenn Sie den Parameternamen für das generische Objekt aufrufen müssen.

Haben Sie versucht:

if classType == ofType.self { ... 
+0

ah, ja gerade versucht, dass immer noch den Fehler: Binär-Operator '==' kann nicht auf Operanden vom Typ 'Any.Type' und 'T' angewendet werden –

0

Die isKindOf in Swift 3 ist nur is so sollten Sie so etwas wie verwenden:

if classType is SecondViewController { 
    print("there is a match") 
} 
0

Ich denke, sollte === Apple Swift Programmiersprache p.768 verwenden

Verwandte Themen