I have a generic method in one of my classes where I want to have a generic type conforming to UIViewController
and UIPickerViewDelegate
. How can I do that? I thought of doing this:
func foo<T: UIViewController, UIPickerViewDelegate> (#viewController: T) {}
But this code doesn't "recognize" the UIPickerViewDelegate
. I also thought of using the pipe |
instead of the comma but this is even worse, the compiler doesn't accept that.
Is it possible to do this or do I have to do 2 parameters for the class and the protocol? Or is there a nicer workaround?
Thanks for your help and Merry Christmas :]
Your code:
func foo<T: UIViewController, UIPickerViewDelegate> (#viewController: T) {}
declares 2 generics parameters:
T
which is UIViewController
. And it's used as viewController
parameter type.UIPickerViewDelegate
which is Any
. And it's not used.Instead, you should use "Where Clause", like:
func foo<T: UIViewController where T:UIPickerViewDelegate> (#viewController: T) {}
Things have been changed in Swift 4:
func foo<T: UIViewController> (viewController: T) where T:UIPickerViewDelegate {}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With