我有一个 NSDictionary 以及在给定键的情况下如何获取值的数据类型
可能吗?
您可以通过以下方式检查您接受的变体
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]);
你可以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