我想定义我的程序集可以通过属性而不是公共方法组装的所有对象(下面的原因)。我看到的问题是,当我调用[XYZAssembly getXYZProperty]
时,我的程序集无法组装这些对象。而不是XYZProperty的实例,我得到TyphoonDefinition: class='XYZPropertyClass', key='(null)', scope='Unknown
例如在我的Header文件中:
@property (nonatomic, strong, getter=getXYZProperty) XYZPropertyClass *XYZProperty
在我的实施文件中:
-(XYZPropertyClass *)getXYZProperty {
return [TyphoonDefinition withClass:[XYZPropertyClass class]];
}
为什么我要走这条路而不是在没有@Properties的情况下创建公共方法?我的目标是使用OBJC Runtime,这样我就可以检索属性的类,我正在寻找的符合特定协议,它的名称,访问器选择器等等......拥有所有这些信息我基本上可以说,[XYZAssembly performSelector(@selector(无论属性的选择器是什么)]。OBJC Runtime不提供任何关于返回类型的信息(仅当它是一个Object),所以没有它我不知道是否它符合特定的协议。
我有什么理由不这样做吗?这是一个众所周知的错误?有意这样做了吗?
答案 0 :(得分:0)
我想我找到了造成这个问题的原因。在实例化程序集时,程序集中的所有属性也将被视为程序集。我假设如果Assemblies属性是其他Assemblies,那么Assemblies应该只有属性。 Typhoon不允许将Assemblies与Assemblies以外的其他属性一起使用是否有任何理由?如果没有,我应该提交一个错误,要求检查该属性是否是TyphoonAssembly的子类?
我在自己的工作区中进行了更改,现在我可以毫无问题地调用我的属性的所有getter,并且不再将我的属性识别为程序集,它只是一个XYZPropertyClass:)