带有SwiftUI的MVVM协调器:“视图”通用协议存在问题

时间:2019-10-04 15:00:21

标签: swift swiftui

我正在尝试更新我的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协议上抛出错误:

enter image description here 我认为some关键字的目的就是要使用通用协议作为返回类型。

我想念什么?

1 个答案:

答案 0 :(得分:0)

  

我认为some关键字的目的恰恰是使用通用协议作为返回类型。

是的,但是似乎在protocol声明中不是这样,不是很确定为什么。

但是有一种方法可以解决此问题,请使用约束为associatedtype的{​​{1}},编译器将不再抱怨。

View