这可能是一个完全倒退的设计,但我想知道这是否可行。我刚刚开始一个有一个名为Core的现有框架的项目。 Core包含协议,当加载Core时,它会执行此操作
for className in classNames {
let clazz = objc_getClass(className)
...
}
基本上在Core模块中它有一个classNames数组,它们只是字符串,然后用objc_getClass()
所有这些类都符合CoreType
协议。
假设我有另一个较小的模块,我们将其称为SubCore
,它作为依赖项Core
引入,并且有自己的类符合CoreType
。
SubCore依赖Core with Carthage并定义符合CoreType的MyClass
let classNames = ["MyClass", ...] // classes that conform to CoreType that are defined in Core, and one class, MyClass, that is defined in SubCore
for className in classNames {
let clazz = objc_getClass(className)
...
}
在一个示例应用程序中,我通过Carthage引入Core和SubCore并尝试加载SDK。运行上面的块时,className“MyClass”的clazz为nil。
我猜这是因为MyClass是在SubCore中定义的,Core并不知道SubCore是什么。那是对的吗?更重要的是,有没有办法在Core中定义一个接口,让SubCore定义一个符合该协议的类,并在Core加载时实例化它,就像我在上面尝试一样?