【发布时间】:2014-10-02 13:57:56
【问题描述】:
我的应用有一个详细视图控制器的协议,声明它们必须有一个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 中一样容易,但我在任何地方都找不到任何建议我如何去做的事情。
【问题讨论】:
-
MasterViewController 中有哪些初始化方法?
-
我已经在stackoverflow.com/a/35069853/1316462上发布了解决方案