我在我的一个类中有一个泛型方法,我想要一个符合UIViewController
和UIPickerViewDelegate
的泛型类型。我怎样才能做到这一点?我想过这样做:
func foo<T: UIViewController, UIPickerViewDelegate> (#viewController: T) {}
但是这段代码并没有“认出”UIPickerViewDelegate
。我还想过使用管道|
而不是逗号,但更糟糕的是,编译器不接受这一点。是可以这样做还是我必须为类和协议做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) {}
Swift 4中的情况发生了变化:
func foo<T: UIViewController> (viewController: T) where T:UIPickerViewDelegate {}
从Swift 4开始,您可以使用Protocol Composition的强大功能。干得好:
func foo<T: UIViewController & UIPickerViewDelegate> (viewController: T) {}