将数据传递给之前的 viewcontroller VIPER

Pass data to previous viewcontroller VIPER

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

查看:

@IBAction func backButtonTapped(_ sender: UIButton) {
    presenter?.goBack()
}

主持人:

func goBack() {
    router.back()
}

路由器:

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

我已经尝试在 Routerprevious controller 中创建一种方法并通过该方法发送数据,但它无法正常工作路由器没有任何演示者实例或任何其他实例,除了视图。

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

  1. 在当前模块的 VC
  2. 中实施 ProtocolDelegate
  3. 在下一个模块的路由器中创建一个委托变量
  4. 然后简单地将委托依赖发送到下一个模块的路由器
  5. 并从下一个模块的路由器调用您的委托方法。

模块 A

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)
    }
}

模块 B

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()
   }
}