如何在类集群中获取“顶级”类的名称?

时间:2012-12-12 17:12:28

标签: objective-c class types class-cluster

设置:

我有数据来自JSON。

使用NSJSONSerialization我将JSON转换为对象。

JSON中的数字值在Objective-C中有几种不同的类类型:

NSNumber, NSDecimalNumber or __NSCFNumber) - 所有这些都在NSNumber下的类群集中。


问题:

1)当我拥有任何类型NSNumber的值时,我需要一种方法来获取类群“伞”类 - NSNumber, NSDecimalNumber or __NSCFNumber

字符串也一样。我需要一种方法来获取NSString,当我有任何这些时:NSString, NSMutableString, __NSCFString, __NSCFConstantString

2)如果我可以通过代码获取NSString集群中所有类的列表,它也可以工作。然后我可以在运行时动态构建一个列表,并确保它已完成。


到目前为止我有什么:

到目前为止,我无法想出一个明智的方法来做到这一点。所以我有一个允许类型的列表,但我担心它可能不完整+它感觉不是最好的解决方案。

代码: https://github.com/icanzilb/JSONModel/blob/master/JSONModel/JSONModel.m#L45

1 个答案:

答案 0 :(得分:2)

你可以这样做:

id object = // obtain the object somehow

Class cls = Nil; // for now

// property list types, roughly equivalent to JSON's fundamental types
NSArray *classes = @[[NSString class], [NSNumber class], [NSArray class], [NSDictionary class], [NSData class], [NSDate class]];

Class c;
for (c in classes) {
    if ([object isKintOfClass:c]) {
        cls = c;
        break;
    }
}

您可以通过向classes数组添加其他类来扩展列表。最后,cls将包含object为实例的类集群,如果它不是任何一个实例,则为Nil