3

我正在尝试使用 SwiftUI 实现 VIPER。首先,我UIHostingController(rootView)从 Wireframe 返回一个 UIKit VC(),直到我意识到在导航中,当演示者告诉 Wireframe 呈现一个 SwiftUIView时,我无法通过UIViewController一个NavigationLink.

遇到这个问题,我试图让 Wireframe 协议返回一个 SwiftUI View,但这似乎是不可能的

协议“视图”只能用作通用约束,因为它具有Self或相关的类型要求

final class HomeWireFrame: HomeWireFrameProtocol {
//Error here returning a View
class func createHomeModule() -> View {

    var view = HomeView()
    //set up VIPER modules...
    .
    .

    return view

如何定义一个返回 SwiftUI 的函数View

4

2 回答 2

2

您的 Presenter 类应该具有视图实现的协议的变量。因此,假设您Presenter实现ModuleInputand ModuleOutputProtocols 的人有 2 个用于 type 视图的变量ViewInput Protocol和一个用于routertype的变量RouterInput Protocol

所以你的路由器输入类和路由器应该是这样的

 protocol RouterInput {
    func routeToAnotherView(from view: ViewInput)
}

class Router: RouterInput {
    func routeToAnotherView(from view: ViewInput){
        guard let viewInMyType = view as? MyType else {
            return
        }
        // Now you can go to your view
    }
}

View从演示者那里,您将使用您的协议出口参数调用该函数。

于 2019-12-23T08:58:05.783 回答
0

我已经解决了这个问题,返回一个“HomeViewProtocol”而不是一个视图......我的 HomeView 符合 HomeViewProtocol,当然,它是一个 SwiftUI 视图。

于 2019-12-23T10:09:48.197 回答