我正在使用valueForKey:
来检查isKindOfClass:
。但其中一些没有价值,因此不会返回任何东西。如何测试实际密钥而不是密钥值?如果object.animal
是带有“@ Cat”的NSString
,那么显然[[object valueForKey @"animal"] isKindOfClass:[NSString class]]
会将其作为字符串检出。但如果object.animal
没有给出值,我仍然想知道animal
的属性是什么类型。
答案 0 :(得分:0)
回答你的问题是property type or class using reflection
虽然我必须指出使用它是非常不可取的。如果你真的需要诉诸于此,你可能想重新思考一下。
答案 1 :(得分:0)
您可以使用Objective-C运行时为属性获取此信息。如果你有
@property (readonly) NSString *animal;
您可以使用以下代码:
#import <objc/runtime.h>
// ...
objc_property_t property = class_getProperty(object.class, "animal");
const char* attr = (property != NULL) ? property_getAttributes(property) : NULL;
attr
是C字符串,如下所示:"T@\"NSString\",R"
。您可以从此字符串中提取类名。有关property_getAttributes
结果,请参阅Apple documentation。请注意,只有将animal
声明为属性时,此解决方案才有效。
处理这种情况要容易得多:
@interface MyObject : NSObject
@property (readonly) NSString *animal;
+ (Class)animalClass;
@end
@implementation MyObject
+ (Class)animalClass {
return [NSString class];
}
@end