Necesito comprobar si el objeto es del tipo NSString
o UIImageView
. ¿Cómo puedo lograr esto? ¿Hay algún tipo de método "isoftype"?En Objective-C, ¿cómo pruebo el tipo de objeto?
Respuesta
Si su objeto es myObject
, y que desea probar para ver si se trata de una NSString
, el código sería:
[myObject isKindOfClass:[NSString class]]
Del mismo modo, si se quería probar myObject
para un UIImageView
:
[myObject isKindOfClass:[UIImageView class]]
Tenga en cuenta que también hay un método isMemberOfClass que comprobará la clase "exactness". Sin embargo, tenga cuidado con esto, ya que muchos objetos de Apple son en realidad tipos de Fundamentos básicos disfrazados. (Por ejemplo, un NSString es más a menudo un NSCFString, y esMemberOfClass: devolverá falso para esta comparación.) –
¡Tenga en cuenta que este método es muy lento! – SAKrisT
¿Es correcto saber que NSString es un clúster de clase? (como NSNumber) – Ricardo
Es probable que utilice
- (BOOL)isKindOfClass:(Class)aClass
Este es un método de NSObject
.
Para obtener más información, consulte la documentación de NSObject
.
Así es como se usa esto.
BOOL test = [self isKindOfClass:[SomeClass class]];
También puede intentar hacer algo como esto
for(id element in myArray)
{
NSLog(@"=======================================");
NSLog(@"Is of type: %@", [element className]);
NSLog(@"Is of type NSString?: %@", ([[element className] isMemberOfClass:[NSString class]])? @"Yes" : @"No");
NSLog(@"Is a kind of NSString: %@", ([[element classForCoder] isSubclassOfClass:[NSString class]])? @"Yes" : @"No");
}
¿Qué es esto 'className' No puedo hacer que funcione con mi ID –
Sí, no existe tal cosa –
-1: No use' className', puede que funcione o no en OS X, pero no está en iOS y no está destinado a ser utilizado para esto. Además, esos 'NSLog's no hacen lo que creo que usted quiso decir con ellos: están verificando el nombre de la clase (siempre una cadena) y la clase del codificador, curiosamente, en lugar de la clase del elemento real. – andyvn22
Ejecución de una prueba simple, que pensé en documentar lo que funciona y lo que no. A menudo veo personas revisando para ver si la clase del objeto es un miembro de la otra clase o es igual a la otra clase.
Para la línea a continuación, tenemos algunos datos mal formados que pueden ser NSArray
, NSDictionary
o (null)
.
NSArray *hits = [[[myXML objectForKey: @"Answer"] objectForKey: @"hits"] objectForKey: @"Hit"];
Estas son las pruebas que se realizaron:
NSLog(@"%@", [hits class]);
if ([hits isMemberOfClass:[NSMutableArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSMutableDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSMutableDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSMutableArray class]]) {
NSLog(@"%@", [hits class]);
}
isKindOfClass
funcionó bastante bien, mientras que isMemberOfClass
no lo hicieron.
Cuando se desea diferir entre una superclase y la inheritedClass puede utilizar:
if([myTestClass class] == [myInheritedClass class]){
NSLog(@"I'm the inheritedClass);
}
if([myTestClass class] == [mySuperClass class]){
NSLog(@"I'm the superClass);
}
Usando - (BOOL)isKindOfClass:(Class)aClass
en este caso resultaría en TRUE en ambas ocasiones porque el inheritedClass es también una especie de la superclase.
'isMemberOfClass:' devolverá 'NO' al tratar con subclases. – mipadi
Puede utilizar el siguiente código en caso de que desee comprobar los tipos de datos primitivos.
// Returns 0 if the object type is equal to double
strcmp([myNumber objCType], @encode(double))
Simple, [yourobject class] devolverá el nombre de clase de yourobject.
En realidad devolverá un objeto 'Clase'. Sin embargo, la 'descripción' de este objeto será el nombre de la clase como una cadena, por lo que puede, por lo tanto, todavía iniciar sesión en la consola. – devios1
- 1. Bloques ObjectiveC equivalente en Java
- 2. objectivec: fb publicar comentario error
- 3. cómo pruebo el indicador de cookies httpOnly
- 4. ¿Cómo pruebo el desarrollo de GWT?
- 5. Cómo obtener el tipo de objeto COM
- 6. ¿Cómo pruebo para typeof (dinámico)?
- 7. Cómo insertar tipo de objeto en ListView?
- 8. ¿Cómo pruebo una cámara en el simulador de iPhone?
- 9. ¿Cómo pruebo la unidad de un finalizador?
- 10. Cómo aumentar el tipo de objeto anónimo en C#
- 11. ¿Cómo comparar el tipo de objeto en Python?
- 12. ¿Cómo encontrar el tipo de objeto que tengo en Perl?
- 13. ¿Cómo verificar el tipo de un objeto en C++/CLI?
- 14. ¿Puedo colocar un ObjectiveC @selector en un NSDictionary?
- 15. ¿Cómo pruebo DelayedJob con Pepino?
- 16. ¿Cómo pruebo los servicios web?
- 17. ¿Cómo pruebo un ActionFilter en ASP.NET MVC?
- 18. Cómo dividir la nueva línea de NSString en ObjectiveC
- 19. ¿Cómo sabe el CLR el tipo de objeto encuadrado?
- 20. ¿Cómo obtener el tipo de clase sin iniciar el objeto?
- 21. ¿Cómo pruebo los ayudantes en Rails?
- 22. ¿Cómo pruebo que un objeto es una instancia de una clase particular en D?
- 23. ¿Cómo pruebo qué elemento tiene el foco en Selenium RC?
- 24. ¿Cómo convertir un objeto en su tipo?
- 25. ¿Cómo pruebo la igualdad de XML en Ruby?
- 26. ObjectiveC Parse Integer from String
- 27. obteniendo el error "invalid_client" en la muestra gdata-objectivec-client
- 28. ¿Cómo pruebo la unidad de objetos heredados?
- 29. ¿Cómo pruebo el método OnActionExecuting de mi controlador asp.net-mvc?
- 30. Cómo comprobar que el tipo actual (objeto de Tipo) tiene interfaz necesaria (o tipo principal)
Ver: [En Objective-C ¿cuál es el equivalente de la palabra clave java "instanceof"?] (Http://stackoverflow.com/questions/536396/in-objective-c-what-is-the-equivelant- of-the-java-instanceof-keyword) – Reunanen
Sí hay: '[object isKindOfClass: [ClassName class]]' –