En Objective-C, quel est l’équivalent du mot clé Java «instanceof»?

Je voudrais vérifier si un object (par exemple, someObject ) est assignable (cast- someObject ) à une variable d’un autre type (par exemple, SpecifiedType ). En Java, je peux écrire:

 someObject instanceof SpecifiedType 

Une question connexe est de savoir si le type d’exécution d’un object est égal à un autre type. En Java, je peux écrire:

 someObject.getClass().equals(SpecifiedType.class) 

Comment cela peut-il être fait en Objective-C?

Essayez [myObject class] pour renvoyer la classe d’un object.

Vous pouvez faire des comparaisons exactes avec:

 if ([myObject class] == [MyClass class]) 

mais pas en utilisant directement l’identifiant MyClass .

De même, vous pouvez trouver si l’object est d’une sous-classe de votre classe avec:

 if ([myObject isKindOfClass:[AnObject class]]) 

comme suggéré par Jon Skeet et Zoul.

De Wikipedia :

Dans Objective-C, par exemple, les Object génériques et NSObject (dans Cocoa / OpenStep) fournissent tous deux la méthode isMemberOfClass: qui renvoie true si l’argument de la méthode est une instance de la classe spécifiée. La méthode isKindOfClass: renvoie de manière analogue true si l’argument hérite de la classe spécifiée.

isKindOfClass: serait le plus proche de instanceof , au son de celui-ci.

Voir la méthode isKindOfClass: dans la documentation NSObject . (Le mot d’avertissement habituel pour une telle question est que la vérification de la classe d’object est souvent le signe d’une erreur.)