Según el tema, ¿cómo puedo verificar si un objeto es un NSArray o NSDictionary?Compruebe si un objeto es un NSArray o NSDictionary
Respuesta
if([obj isKindOfClass:[NSArray class]]){
//Is array
}else if([obj isKindOfClass:[NSDictionary class]]){
//is dictionary
}else{
//is something else
}
Trate
[myObject isKindOfClass:[NSArray class]]
y
[myObject isKindOfClass:[NSDictionary class]]
Ambos deben devolver valores BOOL. Este es el uso básico del método NSObject:
-(BOOL)isKindOfClass:(Class)aClass
Por un poco más información, consulte esta respuesta aquí: In Objective-C, how do I test the object type?
considerar el caso cuando estás analizar los datos de un JSON o XML respuesta. 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 que sólo una matriz o diccionario responderían a:
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
}
Por si acaso alguien llega 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 sólo comprobar los tipos, pero arroja que el 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
}
- 1. Compruebe si un objeto es un delegado
- 2. Inserte NSArray en un NSDictionary
- 3. compruebe si un objeto es nulo
- 4. Cómo almacenar un NSArray en un NSDictionary?
- 5. Mangosta: compruebe si el objeto es un objeto de mangosta
- 6. Encode NSArray o NSDictionary usando NSCoder
- 7. decodificación JSON para NSArray o NSDictionary
- 8. Compruebe si un argumento es una lista o un átomo
- 9. Convertir NSArray en NSDictionary
- 10. Compruebe si existe un objeto en VBScript
- 11. jQuery: compruebe si un objeto tiene clase
- 12. Buscando NSArray de objetos NSDictionary
- 13. Python: compruebe si un objeto es una secuencia
- 14. Compruebe si el objeto Ruby es un booleano
- 15. Compruebe si un objeto es una colección genérica
- 16. Ordenación de un NSArray por un valor NSDictionary
- 17. Objeto débil en un NSDictionary?
- 18. Compruebe si el valor es un número
- 19. compruebe si un archivo es ejecutable
- 20. ¿La mejor manera de ordenar un NSArray de objetos NSDictionary?
- 21. Cómo volcar los datos almacenados en el objeto object-c (NSArray o NSDictionary)
- 22. Escogiendo un objeto aleatorio en un NSArray
- 23. Haskell: compruebe si es un número entero, o compruebe el tipo de variable
- 24. Compruebe si se define un objeto, mejor práctica.
- 25. Filtrado NSArray de objetos NSDictionary utilizando NSPredicate
- 26. Compruebe si string es un prefijo de un Javascript RegExp
- 27. Usando un objeto como clave para NSDictionary
- 28. compruebe si el objeto se crea o no en delphi
- 29. Compruebe si un directorio es un (sistema de archivos) raíz
- 30. Django: compruebe si ya existe un objeto antes de agregar
-1 Muchos objetos pueden responder a los mismos selectores, especialmente algo tan genérico como 'lastObject' o' allKeys'. Usar 'isKindOfClass:' es claramente el camino a seguir cuando se trata de clusters de clases como 'NSArray' y' NSDictionary'. – Calrion
Esa respuesta es una tontería total. [myObject isKindOfClass: [NSArray class]] responde correctamente a la pregunta "will myObject se comportará como si fuera un NSArray", y eso es lo que desea. No hay un selector al que solo responda NSArray o NSDictionary. En dos minutos puedo crear una clase con los métodos de instancia "allKeys" y "lastObject". O agregue "allKeys" como método de categoría a NSArray. – gnasher729