【发布时间】:2019-05-01 13:13:13
【问题描述】:
不起作用的代码示例,但我希望它能够成功编译。下面的源代码很好地描述了想法。您可以轻松地将其粘贴到 Swift Playground 中。
import UIKit
// MARK: - Base classes with generics
class FlowController {
}
class ViewModel<FlowControllerType: FlowController> {
let flowController: FlowControllerType
init (flowController: FlowControllerType) {
self.flowController = flowController
}
}
class ViewController<ViewModelType: ViewModel<FlowController>> {
var viewModel: ViewModelType!
}
// MARK: - My implementation
class MyFlowController: FlowController {
}
class MyViewModel: ViewModel<MyFlowController> {
override init (flowController: MyFlowController) {
super.init(flowController: flowController)
}
}
// ERROR: 'ViewController' requires that 'MyModelView' inherit from 'ViewModel<FlowController>'
class MyViewController: ViewController<MyViewModel> {
}
// MARK: - Code
let viewController = MyViewController()
viewController.viewModel = MyViewModel(flowController: MyFlowController())
问题是我想声明MyViewController,但出现错误:
'ViewController' requires that 'MyModelView' inherit from 'ViewModel<FlowController>'
问题是如何声明这些类以使其工作?我应该为此使用where 子句吗?我想在基类中拥有自己的 ViewController.viewModel 和 ViewModel.flowController 类型,以保持类之间的这些依赖关系。提前谢谢你。
【问题讨论】: