【问题标题】:How to get the name of the "top" class in a class cluster?如何获取类簇中“顶级”类的名称?
【发布时间】:2012-12-12 17:12:28
【问题描述】:

设置:

我有通过 JSON 输入的数据。

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

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

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


问题:

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

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

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


我目前所拥有的:

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

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

【问题讨论】:

  • 还要注意NSCFBooleanNSNumber 的子类。

标签: objective-c class types class-cluster


【解决方案1】:

你可以这样做:

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 我没有声明/暗示这是普遍的,OP 的问题也不需要如此。
猜你喜欢
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 2012-07-15
相关资源
最近更新 更多