我很难理解这种模块间通信.我的应用程序使用了3个模块.
我们称它们为模块A、模块B和模块C.
模块B和模块C都消耗模块A.
The dependency looks something like this:
假设我在模块A中声明了这个BaseViewController
.
open class BaseViewController: UIViewController { }
在模块B中,我有以下声明:
extension BaseViewController {
internal convenience init() {
self.init(nibName: String(describing: type(of: self)), bundle: .moduleA)
}
}
现在,据我所知,此声明应该只在模块级别可见,而不能在模块外可见.
在模块C中,我有一个使用编程布局的BaseViewController
子类.
class MySuperViewController: BaseViewController { }
在同一个模块C中,我有一个协调器,它初始化这个视图控制器,如下所示:
let mySuperVC = MySuperViewController()
我调用了这个协调器方法,它从我的iOS应用程序中实例化了这个mySuperVC
,在那里我导入了所有的A、B和C模块.
我预计MySuperViewController()
会调用UIViewController
的初始化器,因为BaseViewController
的便利初始化是在模块B内部声明的,而且它是内部的,然而,被调用的初始化器是来自模块B的内部初始化器,因此导致我的应用程序崩溃,因为它找不到NIB.
我试图在模块C中编写一个相同的方便初始化,但它从模块B调用了相同的内部初始化.为什么会发生这种情况?