ultima tutorial objective logo objective-c

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 }