问题标签 [viper-architecture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1512 浏览

ios - 将数据传递给之前的视图控制器 VIPER

我在 iOS swift 中使用 VIPER 架构。我有 2 个视图控制器,比如说AB. 起初我从Ato 开始,执行一些任务,然后从toB回来。使用 MVC 或 MVVM ,我们可以创建协议并将数据从. 但是对于VIPER,我很困惑。这是我的 VIPER 代码 B,同时点击后退按钮:BABA

看法:

主持人:

路由器:

我尝试在前一个控制器的路由器中创建一种方法并通过该方法发送数据,但它不起作用,因为路由器没有任何演示者实例或任何其他实例,除了视图。

0 投票
0 回答
142 浏览

swift - 斯威夫特用户界面。如何保持 VIPER 协议添加 EnvironmentObject?

我正在尝试将 VIPER 架构与 SwiftUI 一起使用,使用一些我已经在 UIKit 中使用的协议。

这些是我的BasePresenterAssembler实现:

在我想添加环境对象之前,它与 SwiftUI 视图一起工作得很好。

问题是,如果我以这种方式添加它:

当我尝试修改它时应用程序崩溃

作为该视图的祖先,可能缺少一个View.environmentObject(_:)forUserModel

我试图将环境对象注入更改为视图的初始化,但是它不再是类型LoginView(它是ModifiedContent<...>)并且汇编程序崩溃了。

知道我可以用什么来组装我的模块并使 environmentObject 选项起作用吗?

0 投票
0 回答
26 浏览

ios - 在另一个模块对共享服务执行任务后,如何通知 VIPER 模块需要重新加载?

我正在尝试使用简单的 iOS 曲目管理应用程序来了解 VIPER 架构。

我有 TracksListModule 和 NewTrackModule。两者都有自己的 viewController、interactor、presenter 和 router。两个交互器都注入了共享的 TracksService 来获取轨道。TracksListModule 的路由器提供了 NewTrackModule 的 viewController,它允许用户输入一些轨道的属性。当用户点击保存按钮时,NewTrackModule 的交互器调用 TracksService 的 add 方法,然后关闭 viewController 以返回列表。

问题是添加新曲目后列表未更新。如何通知 TracksListModule 的演示者(或交互者)列表需要更新?

0 投票
1 回答
254 浏览

swift - 快速使用带有 Class 或 Struct 的 VIPER 架构?

当我们想用 VIPER 架构编写项目时,我们应该使用 Struct 或 Class 来定义PresenterorInteractor或 ...

因为我们应该使用Classfor View( 因为继承自UIViewcontroller),所以如果我们Presenter使用 Strcut 编写,性能或内存泄漏或......会发生什么?

我们应该使用weak var presenter: HomeViewPresenterProtocol?in view还是不使用weak?

如果我们在 VIPER 中使用 struct 会发生什么?

0 投票
1 回答
146 浏览

ios - UIImageView 使用 VIPER 从 URL 加载图像

我有一个显示 UITableView 的 VIPER 主模块。每个单元格都有一个 UIImageView,它从 Internet 加载图像。

我不想在我的 UIViewController(View) 中执行网络调用,所以我正在考虑在服务类中定义下载图像的方法。建议让所有组件调用链来请求图像(View->Presenter->Interactor->InputRemoteData->Service)?如果没有,最好的方法是什么?

关于 UITableView,你会建议将 dataSource 方法设置在视图之外(UIViewController)吗?

谢谢

0 投票
2 回答
474 浏览

ios - 我应该在哪里定义 iOS 中 VIPER 架构中的业务逻辑,Swift

我使用了不同的架构,我对 VIPER 架构有点陌生。我曾经在 Model Class 中完成所有业务逻辑。这是否也是 VIPER 的最佳实践,或者在 VIPER 架构中,特别是在 iOS、Swift 中是否有任何标准方法可以做到这一点?

0 投票
1 回答
1366 浏览

swift - 单元测试 VIPER 协议

在阅读了有关此问题的几篇文章和文章后,我仍然对如何在 VIPER 架构中测试方法(例如使用 Swift)感到困惑。

如果我有这个代码:

演示者类

交互类:

我应该如何测试 makeSomeStuffInPresenter 方法?

0 投票
2 回答
234 浏览

ios - Init(coder:) 没有实现

我正在使用 VIP Clean 创建一个应用程序,但在 LoginRouter 上调用 HomeViewController 时遇到问题。

我尝试了几种方法,实例化 homeviewcontroller 并传递 HomeViewController 初始化信息,如下所示:let homeViewController = HomeViewController(interactor: HomeInteractor(repository: HomeRepository(), user: user), router: HomeRouter(navigationController: navigationController), presenter: HomePresenter())

我收到了同样的信息,我不知道如何解决它......

登录路由器:

主视图控制器:

当我打电话回家时,我收到以下消息:Fatal error: init(coder:) has not been implemented: file

有人可以向我解释什么是错误的,或者如何正确地将信息从一个视图控制器传递到另一个视图控制器?

0 投票
2 回答
233 浏览

ios - swift iOS中的面向协议编程

这是Protocols

WireFrameProtocol将具有所有路由功能。HomeWireFrameProtocol将扩展并仅具有一些与家庭相关的路由。测试类继承自HomeInteractorProtocol,它有一个 var wireFrame: HomeWireFrameProtocol,再次HomeWireFrameProtocol扩展WireFrameProtocol

是否var wireFrame: HomeWireFrameProtocol也代表var wireFrame: WireFrameProtocol

0 投票
1 回答
190 浏览

ios - 使用 VIPER 架构时 UI 视图控制器未更新

所以,我是 VIPER 的新手,并使用该架构构建了简单的 http 请求演示应用程序。我遇到了一个 UI 没有更新的问题,尽管视图中的方法仍然被调用,因为我已经检查了 print("test") 是否已执行并显示在调试控制台上。这是相关代码:

看法 :

主持人 :

交互者:

Baxk 到 PResenter :

返回查看:

我的路由器: