如何将参数引用为在Swift中实例化协议的视图控制器?

时间:2016-01-14 15:22:01

标签: swift

我有一个自定义协议,用于定义某些视图控制器的某些行为:

protocol MyProtocol {
    ...
}

我希望能够将我的函数中的参数类型声明为实现此协议的UIViewControllers。例如,在Objective C中,我可以这样做:

-(void)doSomethingWithController:(UIViewController<MyProtocol>*)controller;

我如何在Swift中执行此操作?

2 个答案:

答案 0 :(得分:2)

protocol MyProtocol {
    // ...
}

func doSomethingWithController<T: UIViewController where T: MyProtocol> (controller: T) {
    // ...
}

/* Example */
class MyControllerA : UIViewController, MyProtocol {}
class MyControllerB : UIViewController {}

var a = MyControllerA()
var b = MyControllerB()

doSomethingWithController(a) // ok
doSomethingWithController(b) // compile time error

答案 1 :(得分:-2)

我相信你只需输入协议名称代替类型就可以做到:

protocol MyProtocol {
    func doSomething(viewController: MyProtocol)


}