45 votes

Vérifier si un objet est un NSArray ou un NSDictionary

Selon le sujet, comment puis-je vérifier si un objet est un NSArray ou un NSDictionary ?

98voto

zakishaheen Points 1228
if([obj isKindOfClass:[NSArray class]]){
    //Is array
}else if([obj isKindOfClass:[NSDictionary class]]){
    //is dictionary
}else{
    //is something else
}

13voto

Chris Grant Points 1743

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 ?

9voto

Josh Points 75

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
}

0voto

NRitH Points 3146

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
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X