在 MVVM 中初始化视图模型

Init viewModel in MVVM

我正在使用 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,所以它不应该为零。在 MVVM 中,我们没有像 MVP 中那样的配置器,所以我不知道我应该在哪里做。感谢您的帮助!

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

第二种方法是制作视图模型属性 public并在实例化控制器时从父级初始化它,这样就不需要初始化方法和设置函数。

另一种方法是通过 DI