gpt4 book ai didi

ios - 在需要的初始化中有 fatalError 可以吗?(编码器 aDecoder : NSCoder) when I don't use Storyboards?

转载 作者:搜寻专家 更新时间:2023-10-31 08:16:15 24 4
gpt4 key购买 nike

我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com