将数据传递到上一个视图控制器VIPER



我在iOS swift中使用VIPER架构。我有两个视图控制器,比如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
}

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

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

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

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

最新更新