在 Controller Init 上分配 viewModel?

Assigning viewModel on Controller Init?

我正在使用 MVVM 并想将我的 viewModel 分配给控制器初始化上的 viewController。我以为我会这样实现:

class LoginViewController: UIViewController, UITextFieldDelegate {

    init(loginViewModel: LoginViewModel) {
        self.loginViewModel = loginViewModel
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        fatalError("init(coder:) has not been implemented")
    }

但是我收到错误:

Super.init isn't called on all paths before returning from initializer

这不是正确的路线吗?另外,当它需要一个对象时,我将如何正确初始化 viewModel,但它必须先执行网络请求?使用空白对象实例初始化?

谢谢

编辑:这就是我现在正在尝试的

initWithViewAndViewModel:(loginView: LoginView, loginViewModel: LoginViewModel) {
        super.init()
        self.loginView = loginView
        self.loginViewModel = loginViewModel
    }

作为最佳实践,

第 1 步:

required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

第 2 步:

init(loginViewModel : LoginViewModel) {
        super.init(nibName: nil, bundle: nil)
        initWithModel:(loginViewModel: LoginViewModel)
    }

步骤 3: 实现 initWithModel 函数

如果可行,请尝试添加:

convenience init() {
    self.init(loginViewModel: nil)
}

init(loginViewModel: LoginViewModel?) {
    self.loginViewModel = loginViewModel
    super.init(nibName: nil, bundle: nil)
}

请仔细阅读此 link 它可能会有所帮助:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/TP40014097-CH18-XID_324