2017-06-23 19 views
1

私はさまざまなことを試しましたが、ジェネリックはよくありません。 UIViewControllerのようなソリッドタイプと、NavBarResponderのようなプロトコルに準拠する必要がある変数を持つ関数を呼び出すにはどうすればよいですか? ありがとう!スイフトジェネリックは、タイプを推論することができませんT

weak var lastNavBarResponder: UIViewController? 

func reloadExtendedNavBar() { 
    self.updateState() 
    self.updateStatusBadges() 
    if let vc = self.lastNavBarResponder { 
     self.setup(viewController: vc) // Error: Generic parameter T cannot be inferred 
    } 
} 

func setup<T: UIViewController>(viewController: T) where T: NavBarResponder { 
... 
+0

どのSwiftバージョンをお使いですか? –

答えて

0

私はUIViewControllerが自然NavBarResponderに準拠していないため、エラーがある疑いがあるため、コンパイラはlastNavBarRespondersetupの要件に適合することを保証することはできません。

lastNavBarResponderを、UIViewControllerであるNavBarResponderプロトコルに準拠するタイプに変更してみてください。

これは、これがどのように実装されるかを示す自己完結型の例です。

protocol NavBarResponder {} 

class NavBarResponderController: UIViewController {} 
extension NavBarResponderController: NavBarResponder {} 

var lastNavBarResponder: NavBarResponderController? = NavBarResponderController() 

func setup<T: UIViewController>(viewController: T) where T: NavBarResponder { 
    print("Works") 
} 

func reloadExtendedNavBar() { 

    if let vc = lastNavBarResponder { 
     setup(viewController: vc) 
    } 
} 

reloadExtendedNavBar() 
+0

あなたの助けてくれてありがとう!私はこれを試しましたが、今は、この新しいクラス 'NavBarResponderController'を' NavBarResponder'に準拠させた 'UIViewController'のすべてのクラスを作る必要があるようです。さもなければ私は 'lastNavBarResponder'を割り当てることができません。別の方法がありますか? – xaphod

関連する問題