Pet*_*kov 4 initialization mvvm ios swift
我有一个ViewController,需要初始化ViewModel: NSObject.
我的实施ViewController是:
class ViewController: UIViewController {
let viewModel: ViewModel
init(withViewModel viewModel: ViewModel) {
self.viewModel = viewModel
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Run Code Online (Sandbox Code Playgroud)
ViewModel很简单override init:
class ViewModel: NSObject {
override init() {
super.init()
// Some other logic
}
}
Run Code Online (Sandbox Code Playgroud)
我明白,我需要required init?(coder aDecoder: NSCoder)在ViewController实现中,因为它符合NSCoding协议.但我不确定那里是否安全fatalError.
当我改变fatalError为super.init(coder: aDecoder)收到
属性'self.viewModel'未在super.init调用中初始化
我不想创建viewModel一个可选变量,因为在我的App逻辑中它不可能nil.
此外,当我init?(coder...改为
required init?(coder aDecoder: NSCoder) {
self.viewModel = ViewModel()
super.init(coder: aDecoder)
}
Run Code Online (Sandbox Code Playgroud)
这也不能满足我,因为viewModel它不是唯一的常量,需要在初始化期间实现ViewController.
所以,我的问题:
fatalError这种init方法是否安全?init?(coder...方法在任何情况下都不会运行吗?fatalError?谢谢你的帮助!
由于您不使用故事板,因此可以禁用init,因此您将无法在代码中使用它:
@available(*, unavailable) required init?(coder aDecoder: NSCoder) {
fatalError("disabled init")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
972 次 |
| 最近记录: |