В Objective-C можно указать класс, соответствующий протоколу, в качестве параметра метода. Например, у меня мог бы быть метод, который позволяет только a, UIViewControllerкоторый соответствует UITableViewDataSource:
- (void)foo:(UIViewController<UITableViewDataSource> *)vc;
Я не могу найти способ сделать это в Swift (возможно, пока это невозможно). Вы можете указать несколько протоколов func foo(obj: protocol<P1, P2>), но как вы требуете, чтобы объект также принадлежал к определенному классу?