Selon le sujet, comment puis-je vérifier si un objet est un NSArray ou un NSDictionary ?
Réponses
Trop de publicités?Essayer
[myObject isKindOfClass:[NSArray class]]
et
[myObject isKindOfClass:[NSDictionary class]]
Ces deux éléments doivent renvoyer des valeurs BOOL. Il s'agit de l'utilisation de base de la méthode NSObject :
-(BOOL)isKindOfClass:(Class)aClass
Pour un peu plus d'informations, voir cette réponse ici : En Objective-C, comment tester le type d'objet ?
Prenons le cas où vous analysez des données à partir d'une réponse JSON ou XML. Selon la bibliothèque d'analyse que vous utilisez, vous risquez de ne pas vous retrouver avec des NSArrays ou des NSDictionaries. Au lieu de cela, vous pouvez avoir __NSCFArray ou __NSCFDictionary.
Dans ce cas, la meilleure façon de vérifier si vous avez un tableau ou un dictionnaire est de vérifier s'il répond à un sélecteur auquel seul un tableau ou un dictionnaire répondrait :
if([unknownObject respondsToSelector:@selector(lastObject)]){
// You can treat unknownObject as an NSArray
}else if([unknownObject respondsToSelector:@selector(allKeys)]){
// You can treat unknown Object as an NSDictionary
}
Juste au cas où quelqu'un arriverait en retard à cette fête à la recherche d'un équivalent Swift, c'est parti. C'est beaucoup plus élégant que la version Objective-C, à mon humble avis, car non seulement elle vérifie les types, mais elle les convertit en même temps au type souhaité :
if let arrayVersion = obj as? NSArray {
// arrayVersion is guaranteed to be a non-`nil` NSArray
} else if let dictionaryVersion = obj as? NSDictionary {
// dictionaryVersion is guaranteed to be a non-`nil` NSDictionary
} else {
// it's neither
}