objective c - tutorial - Compruebe si un objeto es un NSArray o NSDictionary
objective c vs swift (4)
Considere el caso cuando está analizando datos de una respuesta JSON o XML. Dependiendo de la biblioteca de análisis que está utilizando, no puede terminar con NSArrays o NSDictionaries. En su lugar, puede tener __NSCFArray o __NSCFDiccionario.
En ese caso, la mejor manera de comprobar si tiene una matriz o un diccionario es comprobar si responde a un selector al que solo respondería una matriz o un diccionario:
if([unknownObject respondsToSelector:@selector(lastObject)]){
// You can treat unknownObject as an NSArray
}else if([unknownObject respondsToSelector:@selector(allKeys)]){
// You can treat unknown Object as an NSDictionary
}
Según el tema, ¿cómo puedo verificar si un objeto es un NSArray o NSDictionary?
En caso de que alguien llegue tarde a esta fiesta en busca de un equivalente de Swift, aquí tienes. Es mucho más elegante que la versión de Objective-C, en mi humilde opinión, porque no solo comprueba los tipos, sino que los lanza al tipo deseado al mismo tiempo:
if let arrayVersion = obj as? NSArray {
// arrayVersion is guaranteed to be a non-`nil` NSArray
} else if let dictionaryVersion = obj as? NSDictionary {
// dictionaryVersion is guaranteed to be a non-`nil` NSDictionary
} else {
// it''s neither
}
Tratar
[myObject isKindOfClass:[NSArray class]]
y
[myObject isKindOfClass:[NSDictionary class]]
Ambos deberían devolver valores BOOL. Este es el uso básico del método NSObject:
-(BOOL)isKindOfClass:(Class)aClass
Para obtener un poco más de información, consulte esta respuesta aquí: En Objective-C, ¿cómo puedo probar el tipo de objeto?
if([obj isKindOfClass:[NSArray class]]){
//Is array
}else if([obj isKindOfClass:[NSDictionary class]]){
//is dictionary
}else{
//is something else
}