我的一个类中有一个通用方法,我想要一个符合UIViewControllerUIPickerViewDelegate的通用类型。我怎样才能做到这一点?我想到了这样做:

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

但是,此代码无法“识别” UIPickerViewDelegate。我还考虑过使用管道|代替逗号,但这更糟,编译器不接受。
可以这样做还是必须为类和协议(protocol)做2个参数?还是有更好的解决方法?

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

最佳答案

您的代码:

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

声明 2个泛型参数:
  • TUIViewController。它用作viewController参数类型。
  • UIPickerViewDelegateAny。而且它没有被使用。

  • 相反,您应该使用"Where Clause",例如:
    func foo<T: UIViewController where T:UIPickerViewDelegate> (#viewController: T) {}
    

    关于generics - 符合两种协议(protocol)的Swift泛型类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27633872/

    10-09 10:00