我在我的一个类中有一个泛型方法,其中我希望有一个符合UIViewController和UIPickerViewDelegate的泛型类型。我怎么能这么做?我想这么做:
func foo<T: UIViewController, UIPickerViewDelegate> (#viewController: T) {}但这段代码并不能“识别”UIPickerViewDelegate。我还考虑使用管道|而不是逗号,但更糟糕的是,编译器不接受这一点。可以这样做吗?还是必须为类和协议执行两个参数?还是有更好的解决办法?
谢谢你的帮助和圣诞快乐
发布于 2014-12-24 08:44:08
你的代码:
func foo<T: UIViewController, UIPickerViewDelegate> (#viewController: T) {}声明2泛型参数:
T,即UIViewController。并用作viewController参数类型。UIPickerViewDelegate,即Any。而且它没有被使用。相反,您应该使用"Where Clause",比如:
func foo<T: UIViewController where T:UIPickerViewDelegate> (#viewController: T) {}发布于 2019-04-03 21:22:24
由于Swift 4,您可以使用协议组合的功能。给你:
func foo<T: UIViewController & UIPickerViewDelegate> (viewController: T) {}发布于 2018-04-17 00:14:19
在Swift 4:func foo<T: UIViewController> (viewController: T) where T:UIPickerViewDelegate {}中,事情发生了变化
https://stackoverflow.com/questions/27633872
复制相似问题