В моем приложении есть протокол для контроллеров подробных представлений, указав, что они должны иметь свойство viewModel:
protocol DetailViewController: class {
    var viewModel: ViewModel? {get set}
}
У меня также есть несколько разных классов, которые реализуют протокол:
class FormViewController: UITableViewController, DetailViewController {
    // ...
}
class MapViewController: UIViewController, DetailViewController {
    // ...
}
Моему контроллеру главного представления требуется свойство, которое может быть установлено для любого подкласса UIViewController, который реализует протокол DetailViewController.
К сожалению, я не могу найти документацию о том, как это сделать. В Objective-C было бы тривиально:
@property (strong, nonatomic) UIViewController<DetailViewController>;
Похоже, что в Swift нет синтаксиса для этого. Самое близкое, что я пришел, - объявить родовое определение моего класса:
class MasterViewController<T where T:UIViewController, T:DetailViewController>: UITableViewController {
    var detailViewController: T?
    // ...
}
Но потом я получаю сообщение об ошибке: "Класс" MasterViewController "не реализует своих членов, связанных с суперклассом"
Кажется, что это должно быть так же легко сделать в Swift, как и в Objective-C, но я не могу найти ничего, что подсказывает, как я могу это сделать.
