Я пытаюсь обновить свой шаблон MVVM-Coordinators, чтобы использовать его с SwiftUI и Combine.
Чтобы сохранить абстракцию, я использую ScenesFactory
, который обрабатывает создание, ну, в общем, моих сцен, таких какследующее:
final class ScenesFactory {
let viewModelsFactory = SceneViewModelsFactory()
}
extension ScenesFactory: SomeFlowScenesFactory {
func makeSomeScene() -> Scene {
let someSceneInput = SomeSceneInput()
let someSceneViewModel = viewModelsFactory.makeSomeSceneViewModel(with: someSceneInput)
let someSceneView = SomeSceneView()
someSceneView.viewModel = someSceneViewModel
return BaseScene(view: someSceneView, viewModel: someSceneViewModel)
}
}
Вот реализация протокола my Scene
:
public protocol Scene {
var view: some View { get }
var viewModel: ViewModelOutput { get }
init(view: some View, viewModel: ViewModelOutput)
}
Цель в том, чтобы иметь возможность использовать UIHostingController
для представления моего someScene.view
но компилятор выдает ошибку в моем Scene
протоколе:
Я думал, что смысл ключевого слова some
заключается именно в том, чтобы использовать универсальные протоколы в качестве возвращаемого типа.
Чего мне не хватает?