You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VIPER架构中Observer与Currencies模块delegate回调依赖配置问题

问题核心原因

你当前的代理回调不生效,是因为你在CurrenciesConfigurator中给CurrenciesPresenter的delegate属性赋值了一个临时创建的空局部变量,没有把已经遵守CurrenciesDelegate协议的ObserverPresenter实例传入配置流程。

修改步骤

1. 调整CurrenciesConfigurator的配置方法,新增delegate入参

修改配置协议和实现类,支持外部传入代理实例:

protocol CurrenciesConfiguratorProtocol {
    // 新增delegate参数
    func configure(with viewController: CurrenciesViewController, delegate: CurrenciesDelegate?)
}

class CurrenciesConfigurator: CurrenciesConfiguratorProtocol {
    func configure(with viewController: CurrenciesViewController, delegate: CurrenciesDelegate?) {
        let presenter = CurrenciesPresenter(view: viewController)
        let interactor = CurrenciesInteractor(presenter: presenter)
        let router = CurrenciesRouter(view: viewController)
 
        viewController.presenter = presenter
        
        presenter.interactor = interactor
        presenter.router = router
        // 直接赋值外部传入的代理实例
        presenter.delegate = delegate
    }
}

2. 移除CurrenciesViewController内部的配置调用

删除CurrenciesViewController中原本的全局configurator变量,以及viewDidLoad中的configure调用,控制器的配置逻辑移到外部创建实例的位置执行。

3. 在Observer模块跳转逻辑中完成配置

在Observer模块负责跳转的位置(通常是ObserverRouter)创建CurrenciesViewController实例后,调用配置方法时传入当前的ObserverPresenter作为代理:

// ObserverRouter中的跳转逻辑示例
func presentCurrenciesPage(from sourceVC: UIViewController, delegate: CurrenciesDelegate?) {
    let currenciesVC = CurrenciesViewController()
    let configurator = CurrenciesConfigurator()
    // 配置时传入代理实例
    configurator.configure(with: currenciesVC, delegate: delegate)
    sourceVC.present(currenciesVC, animated: true)
}

如果是ObserverPresenter触发跳转,调用Router方法时传入self即可:

// ObserverPresenter内触发跳转的代码
func navigateToCurrenciesPage() {
    router.presentCurrenciesPage(from: view, delegate: self)
}

修改完成后,CurrenciesPresenter的delegate就会持有正确的ObserverPresenter实例,dismiss时调用的代理方法就能正常触发Observer模块的更新逻辑。

内容的提问来源于stack exchange,提问作者MaryLitv21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:57:02