我有一个自定义协议,用于定义某些视图控制器的某些行为:
protocol MyProtocol {
...
}
我希望能够将我的函数中的参数类型声明为实现此协议的UIViewControllers。例如,在Objective C中,我可以这样做:
-(void)doSomethingWithController:(UIViewController<MyProtocol>*)controller;
我如何在Swift中执行此操作?
答案 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)
}