我有一个 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")
}
}
ViewModel
具有简单的override init
:
class ViewModel: NSObject {
override init() {
super.init()
// Some other logic
}
}
我明白,我需要 required init?(coder aDecoder: NSCoder)
在 ViewController
实现中,因为它符合 NSCoding
协议(protocol)。但是我不确定在那里设置 fatalError
是否安全。
当我将 fatalError
更改为 super.init(coder: aDecoder)
时,我收到了
property 'self.viewModel' not initialized at super.init call
我不想让 viewModel
成为可选变量,因为在我的 App 逻辑中它不能是 nil
。
此外,当我将 init?(coder...
更改为
required init?(coder aDecoder: NSCoder) {
self.viewModel = ViewModel()
super.init(coder: aDecoder)
}
这也不能让我满意,因为 viewModel
不是唯一需要在 ViewController
初始化期间实现的常量。
那么,我的问题:
- 在这个
init
方法中有fatalError
是否安全? - 我不在我的应用程序中使用 Storyboard(仅用于启动屏幕)。我可以确定这个
init?(coder...
方法在任何情况下都不会运行吗? - 或者也许可以选择在没有
fatalError
的情况下编写它? - 或者我是否需要其中的完整实现,因为在某些情况下我的应用程序会使用它?
感谢您的帮助!
最佳答案
因为你不使用 Storyboard,你可以禁用你的 init,所以你将无法在代码中使用它:
@available(*, unavailable) required init?(coder aDecoder: NSCoder) {
fatalError("disabled init")
}
关于ios - 在需要的初始化中有 fatalError 可以吗?(编码器 aDecoder : NSCoder) when I don't use Storyboards?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43920997/