我的应用程序有一个详细视图控制器协议,规定它们必须具有一个viewModel
属性:
protocol DetailViewController: class {
var viewModel: ViewModel? {get set}
}
我还有一些实现该协议的不同类:
class FormViewController: UITableViewController, DetailViewController {
// ...
}
class MapViewController: UIViewController, DetailViewController {
// ...
}
我的主视图控制器需要一个属性,可以设置为实现了DetailViewController
协议的任何UIViewController
子类。
不幸的是,我找不到如何做到这一点的任何文档。在Objective-C中,这将是微不足道的:
@property (strong, nonatomic) UIViewController<DetailViewController>;
看起来在Swift中没有可用于此的语法。我所做过的最接近的尝试是在我的类定义中声明一个泛型:
class MasterViewController<T where T:UIViewController, T:DetailViewController>: UITableViewController {
var detailViewController: T?
// ...
}
但是我遇到了一个错误,提示“类'MasterViewController'没有实现其超类的必需成员”
这似乎在Swift中应该和Objective-C一样容易,但我找不到任何地方提供如何解决的建议。