I think you can get there by adding an (empty) extension to UIViewController
and then specifying your detailViewController
attribute using a composed protocol of the empty extension and your DetailViewController
. Like this:
protocol UIViewControllerInject {}
extension UIViewController : UIViewControllerInject {}
Now all subclasses of UIViewController
satisfy protocol UIViewControllerInject
. Then with that, simply:
typealias DetailViewControllerComposed = protocol<DetailViewController, UIViewControllerInject>
class MasterViewController : UITableViewController {
var detailViewController : DetailViewControllerComposed?
// ...
}
But, this is not particularly ‘natural’.
=== Edit, Addition ===
Actually, you could make it a bit better if you define your DetailViewController
using my suggested UIViewControllerInject
. Like such:
protocol UIViewControllerInject {}
extension UIViewController : UIViewControllerInject {}
protocol DetailViewController : UIViewControllerInject { /* ... */ }
and now you don’t need to explicitly compose something (my DetailViewControllerComposed
) and can use DetailViewController?
as the type for detailViewController
.