什么是swift中objc的`UIViewController <myprotocol>`的等价物?</myprotocol>

时间:2015-02-26 14:11:40

标签: objective-c swift

我想声明一个接受采用特定协议的UIViewController的函数。我如何在swift中声明这个?

protocol MyProtocol {
    func subtitle() -> String
    func saveResults()
}

func setupViewController(controller: UIViewController<MyProtocol> ) { // ERROR here
    ...
}

为什么我要这样做:
因为我创建了一个容器视图控制器,它有几个不同类的子节点。他们的共同点是MyProtocol,他们继承(直接或间接)UIViewController的事实。

因此我的一个方法将其中一个控制器作为参数。我想告诉编译器可能的最具体信息:对象是UIViewController并且符合MyProtocol。我该如何声明?

1 个答案:

答案 0 :(得分:6)

我不太了解objective-c,但它看起来甚至比使用泛型来实现你所要求的(不能肯定地说,因为我不知道obj-​​c中的泛型语法) 。在swift中使用泛型,你的setupViewController函数应该是这样的:

func setupController<T:UIViewController where T:MyProtocol>(controller : T){

}

这在功能方面与objective-c

中的方法完全等效