En Objective-C, ¿cómo pruebo el tipo de objeto?
Necesito probar si el objeto es de tipo NSString
o UIImageView
. ¿Cómo puedo lograr esto? ¿Existe algún tipo de método "isofttype"?
Si su objeto es myObject
y desea probar para ver si es un NSString
, el código sería:
[myObject isKindOfClass:[NSString class]]
Del mismo modo, si quisieras probar myObject
un UIImageView
:
[myObject isKindOfClass:[UIImageView class]]
Probablemente usarías
- (BOOL)isKindOfClass:(Class)aClass
Este es un método de NSObject
.
Para más información consulte la NSObject
documentación.
Así es como se usa esto.
BOOL test = [self isKindOfClass:[SomeClass class]];
También puedes 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");
}
Al realizar una prueba simple, pensé en documentar qué funciona y qué no. A menudo veo gente comprobando si la clase del objeto es miembro de la otra clase o es igual a la otra clase.
Para la línea siguiente, tenemos algunos datos mal formados que pueden ser NSArray
, an 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 hizo.
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, [su clase de objeto] devolverá el nombre de clase de su objeto.