在VIPER架构中何处以及如何执行segue?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在VIPER架构中何处以及如何执行segue?相关的知识,希望对你有一定的参考价值。
作为初学者,我曾经在ViewControllers
执行segues。此外,Apple鼓励这样的方法,因为UIViewController
有方法performSegue
和prepareForSegue
。
但是学习VIPER,我读到Router
负责场景之间的过渡。第二件事就是根据这样的VIPER流程图:
Router
不得与View
绑在一起。
我绝对不想拒绝使用segues
,因为它非常强大,并且允许我在ViewControllers
之间轻松传输数据。
那么,我应该如何在ViewControllers
之间进行转换?
在纯VIPER中,所有转换都应在Router中执行。如果您选择实施VIPER,那么您将无法使用segues
我个人更喜欢使用Storyboard ID而不是segues。例如 :
1.为您的视图添加相关的故事板ID。 image link.
2.然后你可以访问该视图:let loginVC = UIStoryboard(name: "Main", bundle:nil).instantiateViewController(withIdentifier: "Login")
你可以用它来传递数据:loginVC.type = 0
你可以随时访问它:navigationController?.pushViewController(loginVC, animated: true)
对不起,我有点晚了。我很确定你想出了自己的方式。虽然我认为有人可能会觉得这很有用。
您的路由器应该创建模块并决定如何转到该模块。演示者告诉路由器去哪里,路由器告诉如何去那里。
每个模块的路由器都知道它自己的视图控制器。
如何完成路由取决于您和路由器“路由”功能中实现的代码。如果它只是将下一个模块推送到您的导航堆栈,您的路由功能将调用下一个路由器的'createModule()',然后您只需执行以下操作:
self.viewController?.navigationController?.pushViewController(nextModuleVC)
故事板的segues方法在其诞生时不是VIPER,因为'view'(在这种情况下为View控制器)知道路由决策,在VIPER中,唯一的责任是UI,向演示者发送动作并由其更新。
如果您仍然想要这样做,您可以在视图控制器之间创建segue,然后当用户点击按钮时,例如,您可以将操作发送到演示者,演示者将通知路由器,然后路由器将叫'performSegue'。在我看来,这不是一个好方法。
以上是关于在VIPER架构中何处以及如何执行segue?的主要内容,如果未能解决你的问题,请参考以下文章
iOS 架构模式--解密 MVC,MVP,MVVM以及VIPER架构
iOS-架构模式--解密 MVC,MVP,MVVM以及VIPER架构
在具有 VIPER 架构的应用程序上更新 NSManagedObject