我正在尝试更新我的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)
}
}
这是我的Scene
协议的实现:
public protocol Scene {
var view: some View { get }
var viewModel: ViewModelOutput { get }
init(view: some View, viewModel: ViewModelOutput)
}
这里的目标是能够使用UIHostingController
来显示我的someScene.view
,但是编译器会在我的Scene
协议上抛出错误:
我想念什么?
答案 0 :(得分:0)
我认为some关键字的目的恰恰是使用通用协议作为返回类型。
是的,但是似乎在protocol
声明中不是这样,不是很确定为什么。
但是有一种方法可以解决此问题,请使用约束为associatedtype
的{{1}},编译器将不再抱怨。
View