2

我有一个 NSDictionary 以及在给定键的情况下如何获取值的数据类型

可能吗?

4

2 回答 2

4

您可以通过以下方式检查您接受的变体

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]);
于 2013-06-15T21:24:33.913 回答
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
于 2013-06-15T21:29:35.050 回答