Я, наверное, отвечу, но это может выглядеть лучше, чем это решение.Уловка в следующей строке
class ViewController<FlowControllerType: FlowController, ViewModelType: ViewModel<FlowControllerType>> {
, которую следует использовать вместо
class ViewController<ViewModelType: ViewModel<FlowController>> {
Я надеюсь, что кто-то другой сделает это лучше, но пока только это работает.Пример полной игровой площадки:
import UIKit
// MARK: - Base classes with generics
class FlowController {
}
class ViewModel<FlowControllerType: FlowController> {
let flowController: FlowControllerType
init (flowController: FlowControllerType) {
self.flowController = flowController
}
}
class ViewController<FlowControllerType: FlowController, ViewModelType: ViewModel<FlowControllerType>> {
var viewModel: ViewModelType!
}
// MARK: - My implementation
class MyFlowController: FlowController {
}
class MyViewModel: ViewModel<MyFlowController> {
override init (flowController: MyFlowController) {
super.init(flowController: flowController)
}
}
class MyViewController: ViewController<MyFlowController, MyViewModel> {
}
// MARK: - Code
let viewController = MyViewController()
viewController.viewModel = MyViewModel(flowController: MyFlowController())