Necesito probar si el objeto es de tipo NSStringo UIImageView. ¿Cómo puedo lograr esto? ¿Hay algún tipo de método "isoftype"?
Necesito probar si el objeto es de tipo NSStringo UIImageView. ¿Cómo puedo lograr esto? ¿Hay algún tipo de método "isoftype"?
Respuestas:
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 desea probar myObjectpara 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 NSObjectdocumentación.
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");
}
className, puede o no funcionar en OS X, pero no está en iOS y no debe usarse para esto. Además, esos NSLogno hacen lo que creo que querías que hicieran: están comprobando el nombre de la clase (siempre una cadena) y la clase del codificador, curiosamente, en lugar de la clase del elemento real.
NSLog(@"Is of type: %@", [element class]); funcionará en iOS 7
Cuando desee diferenciar entre una superclase 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);
}
El uso - (BOOL)isKindOfClass:(Class)aClassen este caso daría como resultado VERDADERO las dos veces porque la clase heredada también es una especie de superclase.
isMemberOfClass:regresará NOcuando se trate de subclases.
Al ejecutar una prueba simple, pensé en documentar lo que funciona y lo que no. A menudo veo personas que comprueban si la clase del objeto es miembro de la otra clase o si es igual a la otra clase.
Para la siguiente línea, tenemos algunos datos mal formados que pueden ser an 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 isMemberOfClassno lo hizo.
[object isKindOfClass:[ClassName class]]