如何在 UITabBarController 中使用自定义初始化程序注入依赖项?

How could I inject dependency with custom initializer in UITabBarController?

我有一个没有任何 NIB 文件的自定义 UITabBarController。所有模块的导航控制器都是在 viewDidLoad 方法中使用创建者函数创建的。我想通过这样的创建者函数添加带有参数的 coreDataStack:

override func viewDidLoad() {
super.viewDidLoad()

let aModuleNavCont = aModuleBuilder.createaModule(coreDataStack) as! UINavigationController
...
}

但在此之前我必须在我自己的 UITabBarController class 中设置 coreDataStack 属性。 我写了这个 init:

init(coreDataStack: CoreDataStack) {
    self.coreDataStack = coreDataStack
    super.init(nibName: nil, bundle: nil)
}

但是它说:'required'初始化器'init(coder:)'必须由'UITabBarController'的subclass提供因此我用Xcode生成了这个:

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

现在构建成功,应用程序 运行 很好(看起来不错),但我有预感这不是很好的解决方案。

我尝试在所需的初始化中添加 super.init(coder: aDecoder) 行,但它说 "Property 'self.coreDataStack' not initialized at super.init call"。

我已经尝试了几件事,但我不知道我应该怎么做才能很好地处理这个问题。你能帮忙吗?

提前感谢您提供的任何帮助。

你对此感到紧张是对的,但它实际上是正确的,并且是在你不使用 NIB 时实现 Coder init 的标准方法。

这个藤壶(感觉粘在系统上的奇怪东西)来自 Cocoa 的高度动态特性和 Swift 更严格的初始化要求之间的相互作用。 (Swift 专门因为 lessons we learned from ObjC 添加了这些初始化要求......)