Generics 符合两个协议的Swift通用类型

Generics 符合两个协议的Swift通用类型,generics,swift,ios8,Generics,Swift,Ios8,我在我的一个类中有一个泛型方法,其中我希望有一个符合UIViewController和UIPickerViewDelegate的泛型类型。我该怎么做?我想这样做: func foo<T: UIViewController, UIPickerViewDelegate> (#viewController: T) {} func-foo(#viewController:T){ 但此代码无法“识别”UIPickerViewDelegate。我还想过使用管道|而不是逗号,但更糟糕的是,编译

我在我的一个类中有一个泛型方法,其中我希望有一个符合
UIViewController
UIPickerViewDelegate
的泛型类型。我该怎么做?我想这样做:

func foo<T: UIViewController, UIPickerViewDelegate> (#viewController: T) {}
func-foo(#viewController:T){
但此代码无法“识别”UIPickerViewDelegate。我还想过使用管道
|
而不是逗号,但更糟糕的是,编译器不接受这一点。 是否可以这样做,或者我必须为类和协议设置两个参数?还是有更好的解决办法

感谢您的帮助和圣诞快乐:

您的代码:

func foo<T: UIViewController, UIPickerViewDelegate> (#viewController: T) {}

雨燕4中的情况发生了变化:

func-foo(viewController:T)其中T:UIPickerViewDelegate{}

因为Swift 4您可以使用协议组合的功能。 给你:

func foo<T: UIViewController & UIPickerViewDelegate> (viewController: T) {}
func-foo(viewController:T){

非常感谢!我不知道那里可以使用关键字
。但是现在我在通过
.foo(viewController:self)
在我的viewController(符合UIPickerViewDelegate)中调用此方法时遇到了另一个问题:
类型“UIViewController”不符合协议“UIPickerViewDelegate”
。有什么问题吗?再次感谢您的帮助;)<代码>类MyViewController:UIViewController,UIPickerViewDeleteGate{…}
适合我。如何声明viewController?我还有一些其他协议:
UITableViewDataSource
UITableViewDelegate
UIPickerViewDataSource
感谢@rintaro@borchero你找到解决办法了吗?出于某种原因,我也犯了同样的错误
func foo<T: UIViewController & UIPickerViewDelegate> (viewController: T) {}