6

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

看法:

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

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

4

1 回答 1

4

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

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

模块 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()
   }
}
于 2020-03-18T07:12:42.537 回答