我的一个类中有一个通用方法,我想要一个符合UIViewController
和UIPickerViewDelegate
的通用类型。我怎样才能做到这一点?我想到了这样做:
func foo<T: UIViewController, UIPickerViewDelegate> (#viewController: T) {}
但是,此代码无法“识别”
UIPickerViewDelegate
。我还考虑过使用管道|
代替逗号,但这更糟,编译器不接受。可以这样做还是必须为类和协议(protocol)做2个参数?还是有更好的解决方法?
感谢您的帮助和圣诞快乐:]
最佳答案
您的代码:
func foo<T: UIViewController, UIPickerViewDelegate> (#viewController: T) {}
声明 2个泛型参数:
T
是UIViewController
。它用作viewController
参数类型。 UIPickerViewDelegate
是Any
。而且它没有被使用。 相反,您应该使用"Where Clause",例如:
func foo<T: UIViewController where T:UIPickerViewDelegate> (#viewController: T) {}
关于generics - 符合两种协议(protocol)的Swift泛型类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27633872/