带SwiftUI的MVVM协调员:与';视图';通用协议

带SwiftUI的MVVM协调员:与';视图';通用协议,swift,swiftui,Swift,Swiftui,我正在尝试更新我的MVVM协调员模式,以便将其与SwiftUI和Combine一起使用 为了保留抽象性,我使用了一个ScenesFactory,它可以处理我的场景的创建,如下所示: final class ScenesFactory { let viewModelsFactory = SceneViewModelsFactory() } extension ScenesFactory: SomeFlowScenesFactory { func makeSomeScene() -

我正在尝试更新我的MVVM协调员模式,以便将其与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
场景
协议的实现:

public protocol Scene {
    var view:       some View       { get }
    var viewModel:  ViewModelOutput { get }

    init(view: some View, viewModel: ViewModelOutput)
}
这里的目标是能够使用
UIHostingController
呈现我的
someScene.view
但编译器在我的
场景
协议中抛出错误:

public protocol Scene {
    var view:       some View       { get }
    var viewModel:  ViewModelOutput { get }

    init(view: some View, viewModel: ViewModelOutput)
}
我认为
some
关键字的重点正是使用通用协议作为返回类型

我错过了什么

我认为某个关键字的重点正是使用泛型协议作为返回类型

是的,但它似乎在
协议
声明中不起作用,不知道为什么

但是有一种方法可以解决这个问题,使用一个
associatedtype
,它被约束到
视图中,编译器停止抱怨

公共协议场景{
associatedtype内容:视图
var视图:内容{get}
}
结构五:场景{
var视图:一些视图{
EmptyView()
}
}
我认为某个关键字的重点正是使用泛型协议作为返回类型

是的,但它似乎在
协议
声明中不起作用,不知道为什么

但是有一种方法可以解决这个问题,使用一个
associatedtype
,它被约束到
视图中,编译器停止抱怨

公共协议场景{
associatedtype内容:视图
var视图:内容{get}
}
结构五:场景{
var视图:一些视图{
EmptyView()
}
}