gpt4 book ai didi

ios - ViewController-Presenter-Interactor 是否应该具有一对一的关系

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:02:41 25 4
gpt4 key购买 nike

我正在阅读有关 VIPER 的文章,我的理解是 - 通常一个 viewController 与一个演示者相关,而一个演示者与一个交互器对话。

但是,如果我们有主从页面或列表详细信息页面怎么办。要显示项目列表,我将有一个 Controller /演示器来显示列表,另一个 Controller /演示器来显示详细信息。并且 FetchList 和 FetchDetail 应该属于同一个交互器。

如果这两个演示者与这个交互器通信,他们将必须同时实现 FetchList 和 FetchDetail 方法。并且这两个方法的实现之一将是空的。

最佳答案

您应该有两个独立的 VIPER 模块:MainItems 和 DetailedItems。

阅读这篇文章 ( https://www.ckl.io/blog/best-practices-viper-architecture ) 并了解如何使用委托(delegate)在 VIPER 模块之间发送数据。请注意,FetchListFetchDetail 应该属于不同的交互器:

// 1. Declare which messages can be sent to the delegate

// ProductScreenDelegate.swift
protocol ProductScreenDelegate {
//Add arguments if you need to send some information
func onProductScreenDismissed()
func onProductSelected(_ product: Product?)
}

// 2. Call the delegate when you need to send him a message

// ProductPresenter.swift
class ProductPresenter {

// MARK: Properties
weak var view: ProductView?
var router: ProductWireframe?
var interactor: ProductUseCase?
var delegate: ProductScreenDelegate?
}

extension ProductPresenter: ProductPresentation {

//View tells Presenter that view disappeared
func onViewDidDisappear() {

//Presenter tells its delegate that the screen was dismissed
delegate?.onProductScreenDismissed()
}
}

// 3. Implement the delegate protocol to do something when you receive the message

// ScannerPresenter.swift
class ScannerPresenter: ProductScreenDelegate {

//Presenter receives the message from the sender
func onProductScreenDismissed() {

//Presenter tells view what to do once product screen was dismissed
view?.startScanning()
}
...
}

// 4. Link the delegate from the Product presenter in order to proper initialize it

// File ScannerRouter.swift
class ProductRouter {

static func setupModule(delegate: ProductScreenDelegate?) -> ProductViewController {
...
let presenter = ScannerPresenter()

presenter.view = view
presenter.interactor = interactor
presenter.router = router
presenter.delegate = delegate // Add this line to link the delegate
...
}
}

关于ios - ViewController-Presenter-Interactor 是否应该具有一对一的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40830159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com