Router包含一个指向导航控制器的链接,其中包含堆叠的1,2,3个视图控制器(来自1,2,3个模块)。现在模块3命令路由器navigationController.popToRoot
,应该从模块1调用someFunc()
。
如果是通常的项目,我调用popToRoot
,获得根视图控制器并直接调用someFunc()
。但是如何用VIPER架构正确地做到这一点呢?
我建议有两种方法:
1)实现一个协调器。让协调器知道存在一个navigationController
,并使每个Router
都可以访问它,假设是双向的。然后,当Module3完成后,Coordinator可以调用Module1的方法。
2)实现通知系统。只需在Module3的Router
中继续调用popToRoot
,并向NotificationCenter
发送通知。因为Module1仍然是活的(因为它们是堆叠的),所以它可以采取相应的行动/反应。
我会投票给第一个选项,在VIPER中有一个协调器极大地(和主观上)帮助路由。