繁体   English   中英

带有 SwiftUI 的 MVVM 协调器:“查看”通用协议有问题

[英]MVVM-Coordinators with SwiftUI: Problem with 'View' generic protocol

我正在尝试更新我的 MVVM-Coordinators 模式以将其与 SwiftUI 和组合一起使用。

为了保持抽象,我使用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协议中抛出错误:

在此处输入图像描述 我认为some关键字的重点正是使用泛型协议作为返回类型。

我错过了什么?

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

是的,但它似乎在protocol声明中不起作用,不太确定为什么。

但是有一种方法可以解决这个问题,使用一个被限制为Viewassociatedtype类型,编译器就会停止抱怨。

public protocol Scene {
    associatedtype Content: View
    var view: Content { get }
}

struct V: Scene {
    var view: some View {
        EmptyView()
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM