2016-04-25 5 views
2

ビューコントローラから別のビューコントローラに切り替えるためのコードはDelegatableに準拠するNSViewControllerでなければなりませんプロトコル。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

Swiftは時には、指定されたジェネリックがリファレンス型かどうかを推測するのに問題があるので、 'Delegatable'プロトコルクラスをバインド(':class')しなければならないかもしれません( 'inout'ここに)。 – Hamish

答えて

0

CustomViewControllerがDelegatableに準拠していないため、CustomViewControllerがその機能に渡す際にコンパイラエラーが発生します。しかし、エラーメッセージは正確には役に立ちません。

関連する問題