En Objective-C, ¿cómo pruebo el tipo de objeto?

Resuelto James Skidmore asked hace 15 años • 6 respuestas

Necesito probar si el objeto es de tipo NSStringo UIImageView. ¿Cómo puedo lograr esto? ¿Existe algún tipo de método "isofttype"?

James Skidmore avatar Jul 18 '09 00:07 James Skidmore
Aceptado

Si su objeto es myObjecty desea probar para ver si es un NSString, el código sería:

[myObject isKindOfClass:[NSString class]]

Del mismo modo, si quisieras probar myObjectun UIImageView:

[myObject isKindOfClass:[UIImageView class]]
mmc avatar Jul 17 '2009 17:07 mmc

Probablemente usarías

- (BOOL)isKindOfClass:(Class)aClass

Este es un método de NSObject.

Para más información consulte la NSObjectdocumentació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");    
}
Bryan Hare avatar Jul 17 '2009 17:07 Bryan Hare

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 NSDictionaryo (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]);
}

isKindOfClassfuncionó bastante bien mientras que isMemberOfClassno lo hizo.

Alex Zavatone avatar Oct 08 '2012 21:10 Alex Zavatone

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)) 
Bajju avatar May 08 '2014 08:05 Bajju

Simple, [su clase de objeto] devolverá el nombre de clase de su objeto.

AMohan avatar May 14 '2014 13:05 AMohan