私は 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