【问题标题】:Creating a new VIPER module from Wireframe using SwiftUI使用 SwiftUI 从 Wireframe 创建一个新的 VIPER 模块
【发布时间】:2019-12-23 08:48:02
【问题描述】:

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

遇到这个问题,我试图让 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 的函数?

【问题讨论】:

    标签: ios swift swiftui viper-architecture


    【解决方案1】:

    您的 Presenter 类应该具有视图实现的协议的变量。 因此,假设您的 Presenter 实现了 ModuleInputModuleOutput 协议,对于 ViewInput Protocol 类型的视图有 2 个变量,对于 RouterInput Protocol 类型的 router 有一个变量。

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

     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 协议出口的函数。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 2022-08-17
        • 1970-01-01
        • 2021-03-29
        • 2019-12-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多