【问题标题】:Init viewModel in MVVM在 MVVM 中初始化 viewModel
【发布时间】:2021-12-19 01:20:56
【问题描述】:

我正在使用 MVVM 构建应用程序。我需要在我的 ViewController 中初始化 viewModel,我就是这样做的:

 private var viewModel: SunCalendarViewModel!
    
    init(viewModel: SunCalendarViewModel) {
        self.viewModel = viewModel
        super.init(nibName: nil, bundle: nil)
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }

但是,当我尝试调用我的 viewModel 时,我的应用程序崩溃了,因为它原来是 nil:

 func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        viewModel.search(in: textField.text)
        return true
    }

我很困惑,因为我相信我确实在 init 中初始化了我的 viewModel,所以它不应该是 nil。在 MVVM 中,我们没有像 MVP 中那样的配置器,所以我不知道我应该在哪里做。任何帮助表示赞赏!

【问题讨论】:

  • 您能分享一下您是如何初始化视图控制器的吗?是来自故事板还是以编程方式?
  • 是的,如果您使用 segue 并针对 ios13+,那么 @IBSegueAction 可以帮助您。
  • 我从情节提要初始化我的视图控制器。那么我应该在哪里进行依赖注入呢?

标签: ios swift mvvm init


【解决方案1】:

如果你看看 clean-swift 是如何做到的,这也可以达到你的目的 (https://github.com/Clean-Swift/CleanStore/blob/master/CleanStore/Scenes/ShowOrder/ShowOrderViewController.swift)

第二种方法是在实例化控制器时将viewmodel属性公开并从父级初始化它,然后您不需要init方法和设置函数。

另一种方法是通过 DI

【讨论】:

    猜你喜欢
    • 2013-11-02
    • 2014-12-15
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 2020-12-26
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多