versiones tutorial plataforma objective example ios objective-c

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



objective c vs swift (6)

Cuando quiera diferir entre una clase superior y la clase heredada puede usar:

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 TRUE ambas veces porque la clase heredada es también una clase de la clase super.

Necesito probar si el objeto es de tipo NSString o UIImageView . ¿Cómo puedo lograr esto? ¿Hay algún tipo de método "isoftype"?


Ejecutando una prueba simple, pensé que documentaría qué funciona y qué no. A menudo veo personas que verifican si la clase del objeto es miembro de la otra clase o si es igual a la otra clase.

Para la línea a continuación, tenemos algunos datos mal formados que pueden ser un NSArray , un 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.


Probablemente usarías

- (BOOL)isKindOfClass:(Class)aClass

Este es un método de NSObject .

Para más información verifique la documentación de NSObject .

Así es como usas esto.

BOOL test = [self isKindOfClass:[SomeClass class]];

También podrías 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"); }


Puede utilizar el siguiente código en caso de que desee verificar los tipos de tipos de datos primitivos.

// Returns 0 if the object type is equal to double strcmp([myNumber objCType], @encode(double))


Si su objeto es myObject , y desea realizar una prueba para ver si es una NSString , el código sería:

[myObject isKindOfClass:[NSString class]]

Del mismo modo, si desea probar myObject para un UIImageView :

[myObject isKindOfClass:[UIImageView class]]


Simple, [yourobject class] devolverá el nombre de clase de yourobject.