3

设置:

我有通过 JSON 输入的数据。

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

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

( NSNumber, NSDecimalNumber or __NSCFNumber) - 所有这些都在NSNumber.


问题:

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

字符串也是如此。NSString当我有以下任何一种时,我需要一种方法来获得: NSString, NSMutableString, __NSCFString, __NSCFConstantString

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


到目前为止我所拥有的:

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

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

4

1 回答 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如果它不是任何一个的实例。

于 2012-12-12T17:19:21.523 回答