首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >符合两种协议的Swift泛型

符合两种协议的Swift泛型
EN

Stack Overflow用户
提问于 2014-12-24 08:30:14
回答 3查看 5.6K关注 0票数 16

我在我的一个类中有一个泛型方法,其中我希望有一个符合UIViewControllerUIPickerViewDelegate的泛型类型。我怎么能这么做?我想这么做:

代码语言:javascript
复制
func foo<T: UIViewController, UIPickerViewDelegate> (#viewController: T) {}

但这段代码并不能“识别”UIPickerViewDelegate。我还考虑使用管道|而不是逗号,但更糟糕的是,编译器不接受这一点。可以这样做吗?还是必须为类和协议执行两个参数?还是有更好的解决办法?

谢谢你的帮助和圣诞快乐

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-24 08:44:08

你的代码:

代码语言:javascript
复制
func foo<T: UIViewController, UIPickerViewDelegate> (#viewController: T) {}

声明2泛型参数:

  • T,即UIViewController。并用作viewController参数类型。
  • UIPickerViewDelegate,即Any。而且它没有被使用。

相反,您应该使用"Where Clause",比如:

代码语言:javascript
复制
func foo<T: UIViewController where T:UIPickerViewDelegate> (#viewController: T) {}
票数 27
EN

Stack Overflow用户

发布于 2019-04-03 21:22:24

由于Swift 4,您可以使用协议组合的功能。给你:

代码语言:javascript
复制
func foo<T: UIViewController & UIPickerViewDelegate> (viewController: T) {}
票数 12
EN

Stack Overflow用户

发布于 2018-04-17 00:14:19

Swift 4func foo<T: UIViewController> (viewController: T) where T:UIPickerViewDelegate {}中,事情发生了变化

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27633872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档