web-dev-qa-db-fra.com

iPhone comment vérifier le type d'un objet?

Je veux vérifier le type d'un objet. Comment puis je faire ça?

Le scénario est que j'obtiens un objet. Si cet objet est de type A, effectuez quelques opérations. S'il est de type B, effectuez quelques opérations. Actuellement, le type de l'objet est C qui est parent de A et B.

J'ai deux classes AViewController et BViewController. L'objet que je reçois dans UIViewController. Maintenant, comment vérifier si l'objet est AViewController ou BViewController?

63
g.revolution
if([some_object isKindOfClass:[A_Class_Name class]])
{
    // do somthing
}
152
Pavel Yakimenko

Il existe certaines méthodes sur NSObject qui vous permettent de vérifier les classes.

Il y a d'abord -class qui renverra la classe de votre objet. Cela retournera soit AViewController ou BViewController.

Ensuite, il y a deux méthodes, -isKindofClass: et isMemberOfClass:.

-isKindOfClass: comparera le récepteur avec la classe passée en argument et retournera vrai ou faux selon que la classe est du même type ou d'une sous-classe de la classe donnée.

-isMemberOfClass: comparera le récepteur avec la classe passée comme argument et retournera vrai ou faux selon que la classe est strictement la même classe que la classe donnée.

45
Jasarien

Un modèle plus courant dans Objective-C consiste à vérifier si l'objet répond aux méthodes qui vous intéressent. Exemple:

if ([object respondsToSelector:@selector(length)]) {
    // Do something
}

if ([object conformsToProtocol:@protocol(NSObject)]) {
    // Do something
}
3
rpetrich