¿Cómo declaro una variable que tiene un tipo e implementa un protocolo?

Mi aplicación tiene un protocolo para controladores de vista detallada, que indica que deben tener unviewModel propiedad:

protocol DetailViewController: class {
    var viewModel: ViewModel? {get set}
}

También tengo algunas clases diferentes que implementan el protocolo:

class FormViewController: UITableViewController, DetailViewController {
    // ...
}

class MapViewController: UIViewController, DetailViewController {
    // ...
}

Mi controlador de vista maestro necesita una propiedad que se pueda establecer en cualquierUIViewController subclase que implementa elDetailViewController protocolo.

Lamentablemente no puedo encontrar ninguna documentación sobre cómo hacer esto. En Objective-C sería trivial:

@property (strong, nonatomic) UIViewController<DetailViewController>;

Parece que no hay ninguna sintaxis disponible en Swift para hacer esto. Lo más cerca que he estado es declarar un genérico en mi definición de clase:

class MasterViewController<T where T:UIViewController, T:DetailViewController>: UITableViewController {
    var detailViewController: T?
    // ...
}

Pero luego aparece un error que dice que "La clase 'MasterViewController' no implementa los miembros requeridos de su superclase"

Parece que debería ser tan fácil de hacer en Swift como lo es en Objective-C, pero no puedo encontrar nada en ningún lugar que sugiera cómo podría hacerlo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta