我在处理从另一个模块提供的模块返回的某些信息时遇到问题。就我而言,我有两个模块,Map 和 Search。 MapView 通知它要搜索地址,因此 MapPresenter 开始显示搜索模块的操作(其 View 以模态显示)。在搜索模块中,我进行文本搜索、获取结果、显示结果并选择一个。该选择必须返回到 Map 模块。我怎样才能在不打破界限的情况下实现这一目标?

考虑到,如果我错了,请纠正我,模块之间的通信只能通过路由实现(而不是通过通知、完成块等模块之间的“跳转”),我实现了这个场景:

(对不起,也许序列图会更好)
MapWireframe 实现了常规接口(interface),但也是另一个我称为 MapModuleInput 的接口(interface),所以当我开始搜索操作(蓝色)时,我将实现该接口(interface)的 SearchWireframe 传递给 MapWireframe

之后,在红色流程中,在SearchView中我开始搜索case,它从interactor等处获取结果,然后呈现结果,用户选择一个(绿色),因此将选择的结果返回给通过 MapModuleInput 接口(interface)映射。

那么,这是正确的吗?

谢谢!

最佳答案

如果我理解正确,您有一个带有搜索功能的“模块”,它会使用搜索交互器进行搜索,检索一些 POI 并将此结果返回给搜索演示者。您有一个可以避免的问题,而不是在 SearchPresenter 中检索结果,只需与 map 通信并发送查询,然后在 MapView 中使用 SearchInteractor,现在您不必在模块之间发送对象。
如果您需要以您在图中绘制的方式执行此操作,请使用像 Core Data 这样的数据源来持久化巨大的对象,并稍后在另一个“模块”中检索它。

关于ios - VIPER 架构 : how to obtain return info from a module,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28177377/

10-11 14:36