Ios 将数据传递到上一个viewcontroller VIPER

Ios 将数据传递到上一个viewcontroller VIPER,ios,swift,popviewcontroller,viper,Ios,Swift,Popviewcontroller,Viper,我在iOS swift中使用VIPER架构。我有两个视图控制器,比如说A和B。首先,我从A到B,执行一些任务,然后从B到A。使用MVC或MVVM,我们可以创建协议并将数据从B传输到A。但对于毒蛇,我感到困惑。这是我的毒蛇代码B,点击后退按钮: 视图: 演示者: func goBack() { router.back() } 路由器: func back() { viewController?.navigationController?.popViewController(ani

我在iOS swift中使用VIPER架构。我有两个视图控制器,比如说
A
B
。首先,我从
A
B
,执行一些任务,然后从
B
A
。使用MVC或MVVM,我们可以创建协议并将数据从
B
传输到
A
。但对于毒蛇,我感到困惑。这是我的毒蛇代码B,点击后退按钮:

视图:

演示者:

func goBack() {
    router.back()
}
路由器:

func back() {
    viewController?.navigationController?.popViewController(animated: true)
    //here I want to send data back to previous viewcontroller
}

我曾尝试在先前控制器的路由器中创建一个方法,并通过该方法发送数据,但它不起作用,因为路由器没有任何presenter实例或任何其他实例,除了view。

注:-在Viper中,路由器是单向的。 所以这可能对你有帮助

  • 在当前模块的VC中实现protocollegate
  • 在下一个模块的路由器中创建委托变量
  • 然后简单地将委托依赖性发送到下一个模块的路由器
  • 并从下一个模块的路由器调用您的委托方法
  • 模块A

    模块B

    func back() {
        viewController?.navigationController?.popViewController(animated: true)
        //here I want to send data back to previous viewcontroller
    }
    
    final class VCA: SomeProtocolDelegate {
     fund someMethod() {
          //Your task Action From Module B
        }
     }
    
    final class ModuleARouter: WireFrameProtocol {
        fund gotoModuleB(withView vc: VCA) {
           ModuleBRouter.load(onView: vc)
        }
    }
    
    final class ModuleBRouter: WireframeProtocol {
        internal weak var delegate: SomeProtocolDelegate?
        // Here you  can add more argument on load method for delegate 
        // since in this example i'm send data back ViewController So I didn't create 
        class func load(onView VC: UIViewController) {
            //setup your VIPER protocol and class
            if let vCA = VC as? VCA {
                router.delegate = vCA
            }
        }
    
       func backToPreviousModule() {
          self.delegate?. someMethod()
       }
    }