2016-04-25 49 views
2

我有以下代码让我从任何视图控制器切换到任何其他视图控制器,并且参数需要是符合DelegatableNSViewController协议。Swift 2函数强制执行类和协议遵守,通用参数无法推断

当我打电话给第3行的功能时,我得到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

您的CustomViewController类可授权吗? –

+1

另外,您不必将它作为'inout'来传递。 – ozgur

+1

另外,你可能不得不让你的'Delegatable'协议类绑定(':class'),因为Swift有时无法推断给定泛型是否为引用类型(这可能是你为什么试图使用'inout'这里)。 – Hamish

回答

0

您CustomViewController不符合可委托,试图将它传递到您的功能时,这将使该编译器错误。错误信息并不完全有帮助。