2016-04-25 3 views
2

Ich habe den folgenden Code, um mich von jedem View Controller zu einem anderen wechseln zu lassen, und der Parameter muss ein NSViewController sein, der der Delegatable entspricht Protokoll.Swift 2 Funktion erzwingt die Einhaltung von Klassen und Protokollen, generischer Parameter konnte nicht abgeleitet werden

Wenn ich die Funktion in Zeile 3 anrufe, bekomme ich Generic parameter 'C' could not be inferred.

func foo() { 
    var viewController = CustomViewController() 
    showViewForController(&viewController) 
} 

private func showViewForController<C:NSViewController where C:Delegatable>(inout viewController: C) -> Void { 
    currentVC?.removeFromParentViewController() 
    currentVC?.view.removeFromSuperview() 

    viewController.delegate = self 
    addChildViewController(viewController) 
    self.view.addSubview(viewController.view) 
    currentVC = viewController 
} 
+3

Ist Ihr CustomViewController Klasse Delegatable? –

+1

Auch Sie müssen nicht als 'inout' passieren. – ozgur

+1

Auch Sie können Ihre 'Delegatable' Protokollklasse gebunden machen müssen (': CLASS'), wie Swift manchmal Schwierigkeiten hat, Folgern, ob ein bestimmtes generisch ist ein Referenztyp (das auch gewesen sein mag, warum Sie versucht haben, 'inout' zu verwenden Hier). – Hamish

Antwort

0

Ihr CustomViewController entspricht nicht Delegatable, die diesen Compiler-Fehler geben würde, wenn sie versuchen Sie es in Ihrer Funktion zu übergeben. Die Fehlermeldung ist jedoch nicht gerade hilfreich.

Verwandte Themen