【问题标题】:Is it allowed to make Multiple navigation in one router VIPER function?是否允许在一个路由器 VIPER 功能中进行多重导航?
【发布时间】:2022-12-09 12:22:15
【问题描述】:

是否允许在一个路由器 VIPER 功能中进行多重导航?我只为多个导航创建了一个 VIPER 路由器功能。

我的代码是这样的:

func navigateToView(data: [String: Any]) {
        guard let view = viewController else { return }
        if data["callback"] != nil && data["data"] != nil {
            //navigation1(enum: data["enum"] as! Enum, from: view, data: data, callback: { param })
        } else if data["callback"] != nil && data["data"] == nil {
            //navigation2(enum: data["enum"] as! Enum, from: view, callback: { param })
        } else if data["data"] != nil && data["callback"] == nil {
            //navigation3(enum: data["enum"] as! Enum, from: view, data: data)
        } else {
            //navigation4(enum: data["enum"] as! Enum, from: view)
        }
    }

【问题讨论】:

  • 是的,您可以在单个路由器 VIPER 功能中进行多次导航

标签: ios swift function viper-architecture viper


【解决方案1】:

要回答这个问题,我们先来看看VIPER的各个部分。

看法: 由用户界面负责。通知演示者有关用户操作、生命周期方法并提供更新用户界面的方法。

交互器:包含业务逻辑。进行所有第三方交互并通过用例通知其输出(在本例中为演示者)。

路由器: 由导航负责。提供导航到其他屏幕的方法。

主持人:包含表示逻辑,例如要获取哪些数据、要显示哪个视图或使用任何用户操作、生命周期方法或用例导航哪个屏幕。

navigateToView 在这里做什么来决定导航哪个屏幕。这应该属于表示逻辑,因为导航到任何屏幕都可以通过用户操作或根据数据中的字段来完成,但路由器不应该知道这一点。

假设您有另一个按钮可以导航到“导航 1”中的屏幕。然后,当演示者获得按钮单击事件时,它告诉路由器导航到哪里。它不会告诉路由器动作,路由器也不会决定去哪里。这同样适用于此。

因此,在路由器中使用此逻辑不是最佳做法。

【讨论】:

    猜你喜欢
    • 2017-11-07
    • 2012-07-07
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多