我想声明一个接受采用特定协议的UIViewController的函数。我如何在swift中声明这个?
protocol MyProtocol {
func subtitle() -> String
func saveResults()
}
func setupViewController(controller: UIViewController<MyProtocol> ) { // ERROR here
...
}
为什么我要这样做:
因为我创建了一个容器视图控制器,它有几个不同类的子节点。他们的共同点是MyProtocol
,他们继承(直接或间接)UIViewController
的事实。
因此我的一个方法将其中一个控制器作为参数。我想告诉编译器可能的最具体信息:对象是UIViewController
并且符合MyProtocol
。我该如何声明?
答案 0 :(得分:6)
我不太了解objective-c,但它看起来甚至比使用泛型来实现你所要求的(不能肯定地说,因为我不知道obj-c中的泛型语法) 。在swift中使用泛型,你的setupViewController函数应该是这样的:
func setupController<T:UIViewController where T:MyProtocol>(controller : T){
}
这在功能方面与objective-c
中的方法完全等效