在 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
我正在使用 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