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.