威伯·斯威夫特

NavigationController对View,View to Presenter,Presenter to Interactor和Router都有很强的引用。 因此,我们让NavigationController包含所有模块。 结果,此解决方案使我们可以在将ViewController从NavigationController中删除后销毁所有模块。

TableViewDelegate和TableViewDataSource

我们建议使用的方法不是唯一可能的方法。 创建它是为了没有更好的东西。 让我们用一个例子来展示它。

这里有一系列的人类对象,它们是通过一些API异步接收的。

人类具有以下特性:

–名称:字符串;

–年龄:整数;

–照片:UIImage;

为了显示信息,UITableView正在使用。 人的名字,年龄和照片被加载到一个单元格中。

VIPER原则之一说View是被动的,但是Presenter不能向View返回任何内容。 视图应具有设置器,Presenter用来显示信息。 问题在于它仅适用于已创建的对象,而不适用于动态创建的对象。 这意味着您不能为每个单元格写一个setter。 这是为什么? 首先,编写应用程序时,单元数是未知的。 其次,为相同的对象编写setter是愚蠢的。

解:

让我们为View内部Human的每个属性创建一个变量,然后为每个新变量添加一个setter。

接下来,在Presenter中创建一个方法,该方法从Interactor获取数据并将其设置为View中的“ currentHuman”变量:

这样,每个单元格都填充有正确的数据。 它破坏了原理,该原理说View除了对UIViews和Presenter的引用外不应有任何其他内容。 但是它遵循另一个规则,并且代码仍然可以测试。

PS:本文由BytePace移动开发人员撰写。 您可以在这里查看他的作品和其他文章:http://bytepace.com/