如何获取给定NSDictionary键的值的数据类型?

时间:2013-06-15 21:12:11

标签: ios objective-c

我有一个NSDictionary以及在给定密钥

的情况下获取值的数据类型的内容

有可能吗?

2 个答案:

答案 0 :(得分:3)

您可以通过

检查您接受的变体
id objectValue = [dictionary valueForKey:@"SomeKey"];
if ([objectValue isKindOfClass:[NSString class]]) {
    //Object is a NSString
} else if ([objectValue isKindOfClass:[NSArray class]]) {
   //Object is a NSArray
} else if ([objectValue isKindOfClass:[NSDictionary class]]) {
   //Object is a NSDictionary
} else if ([objectValue isKindOfClass:[NSNumber class]]) {
   //Object is a NSNumber
}

等等..在此模式中,只需处理您的应用支持的所有类型。忽略您的应用程序不支持此模式的值,或者当您不支持值的数据类型时,以其他方式正常失败

要弄清楚它是什么类(例如调试应用程序),你可以这样做:

NSString *className = NSStringFromClass([objectValue class]);

答案 1 :(得分:0)

您可以使用NSStringFromClass来获取该类型,或者无法使用isKindOfClass:

NSDictionary *dictionary = @{
                           @"string": @"Something",
                           @"number": @(1),
                           @"null": [NSNull null],
                           @"custom": [[CustomType alloc] init]
                           };


[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
  NSLog(@"type = %@", NSStringFromClass([obj class]));
}];

输出:

type = CustomType
type = NSNull
type = __NSCFNumber
type = __NSCFConstantString