如何获取类簇中“顶层”类的名称?

3

设置:

我通过JSON传输数据。

使用NSJSONSerialization将JSON转换为对象。

JSON中的数字值作为几种不同的类类型在Objective-C中出现:

(NSNumber、NSDecimalNumber或__NSCFNumber) - 所有这些都在NSNumber的类簇中。


问题:

1) 当我有NSNumber、NSDecimalNumber或__NSCFNumber类型的任何值时,我需要一种获取类簇“伞兵”类-NSNumber的方法。

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

2) 如果能够通过代码获得NSString类簇中所有类的列表,那么也可以工作。然后我可以在运行时动态构建一个列表,并确保它是完整的。


到目前为止我所拥有的:

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

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


请注意,NSCFBooleanNSNumber 的子类。 - user529758
1个回答

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


这适用于核心基础类。请记住,可能还有更多的类簇存在。 - Berik
@Berik 我没有说/暗示这是普遍的,OP的问题也不需要如此。 - user529758

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接