J'ai besoin de tester si l'objet est de type NSString
ou UIImageView
. Comment puis-je accomplir cela? Existe-t-il un type de méthode "isoftype"?
Réponses
Trop de publicités?Vous utiliseriez probablement
- (BOOL)isKindOfClass:(Class)aClass
C'est une fonction du NSObject
.
Pour plus d'informations, consultez la documentation NSObject
.
C'est comme ça que vous l'utilisez.
BOOL test = [self isKindOfClass:[SomeClass class]];
Vous pourriez aussi essayer de faire quelque chose comme ça
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");
}
Lorsque vous voulez différer entre une superclasse et la classe inherited, vous pouvez utiliser:
if([myTestClass class] == [myInheritedClass class]){
NSLog(@"I'm the inheritedClass);
}
if([myTestClass class] == [mySuperClass class]){
NSLog(@"I'm the superClass);
}
L'utilisation de - (BOOL)isKindOfClass:(Class)aClass
dans ce cas donnerait TRUE à la fois parce que la classe inheritedClass est aussi une sorte de superclasse.
L'exécution d'un test simple, je pensais le document ce qui fonctionne et ce qui ne fonctionne pas. Souvent je vois des gens de la vérification pour voir si la classe de l'objet est un membre de l'autre classe ou est égal à l'autre classe.
Pour la ligne ci-dessous, nous avons quelques peu formée de données qui peut être un NSArray
, NSDictionary
ou (null)
.
NSArray *hits = [[[myXML objectForKey: @"Answer"] objectForKey: @"hits"] objectForKey: @"Hit"];
Ce sont les tests qui ont été effectués:
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
a fonctionné plutôt bien - isMemberOfClass
n'ont pas.