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"?
Si votre objet est myObject
et que vous souhaitez vérifier s'il s'agit d'un NSString
, le code serait:
[myObject isKindOfClass:[NSString class]]
De même, si vous vouliez tester myObject
pour un UIImageView
:
[myObject isKindOfClass:[UIImageView class]]
Vous utiliseriez probablement
- (BOOL)isKindOfClass:(Class)aClass
C'est une méthode de NSObject
.
Pour plus d'informations, consultez la documentation NSObject
.
Voici comment vous utilisez ceci.
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 souhaitez faire la différence entre une superClass et une inheritedClass, vous pouvez utiliser:
if([myTestClass class] == [myInheritedClass class]){
NSLog(@"I'm the inheritedClass);
}
if([myTestClass class] == [mySuperClass class]){
NSLog(@"I'm the superClass);
}
Utiliser - (BOOL)isKindOfClass:(Class)aClass
dans ce cas aurait pour résultat TRUE à la fois, car inheritedClass est aussi une sorte de superClass.
En effectuant un test simple, je pensais documenter ce qui fonctionne et ce qui ne fonctionne pas. Souvent, je vois des gens vérifier si la classe de l'objet est membre de l'autre classe ou égale à l'autre classe.
Pour la ligne ci-dessous, nous avons des données mal formées qui peuvent être un NSArray
, un 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 plutôt bien fonctionné que isMemberOfClass
ne l’a pas fait.
Vous pouvez utiliser le code suivant si vous souhaitez vérifier les types de types de données primitifs.
// Returns 0 if the object type is equal to double
strcmp([myNumber objCType], @encode(double))
Simple, [yourobject class], il retournera le nom de la classe de yourobject.