2016-01-14 4 views
0

У меня есть собственный протокол, я использую, чтобы определить некоторое поведение для некоторых из моих контроллеров зрения:Как ссылаться на параметр как контроллер представления, создающий протокол в Swift?

protocol MyProtocol { 
    ... 
} 

Я хочу, чтобы иметь возможность объявить тип параметра в моей функции, как UIViewControllers, которые реализуют этот протокол. Например, в Objective C я мог бы сделать это:

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

Как это сделать в Swift?

ответ

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 
-2

Я считаю, что вы можете сделать это, просто введя имя протокола в месте типа:

protocol MyProtocol { 
    func doSomething(viewController: MyProtocol) 


} 
+0

Я думаю, Т.С. хочет это ViewController аргумент, чтобы быть своего рода UIViewController класс, а не какой-либо объект, соответствует протоколу MyProtocol –

Смежные вопросы