将数据传递到之前的视图控制器 VIPER

Arn*_*nab 6 popviewcontroller ios swift viper-architecture

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

看法:

@IBAction func backButtonTapped(_ sender: UIButton) {
    presenter?.goBack()
}
Run Code Online (Sandbox Code Playgroud)

主持人:

func goBack() {
    router.back()
}
Run Code Online (Sandbox Code Playgroud)

路由器:

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

我尝试在前一个控制器路由器中创建一种方法并通过该方法发送数据,但它不起作用,因为路由器没有任何演示者实例或除视图之外的任何其他实例。

PRA*_*EEN 5

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

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

模块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)
    }
}
Run Code Online (Sandbox Code Playgroud)

模块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()
   }
}
Run Code Online (Sandbox Code Playgroud)