web-dev-qa-db-fra.com

En Objective-C, quel est l'équivalent du mot clé "instanceof" de Java?

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

someObject instanceof SpecifiedType

Une question connexe consiste à déterminer si le type d'exécution d'un objet est égal à un autre type. En Java, je peux écrire:

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

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

184
Dimitris

Essayez [myObject class] pour retourner la classe d'un objet.

Vous pouvez faire des comparaisons exactes avec:

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

mais pas en utilisant directement MyClass identifiant.

De même, vous pouvez trouver si l'objet est une sous-classe de votre classe avec:

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

comme suggéré par Jon Skeet et Zoul.

258
mouviciel

De Wikipedia :

En Objective-C, par exemple, le générique Object et NSObject (dans Cocoa/OpenStep) fournissent 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: retourne analogiquement la valeur true si l'argument hérite de la classe spécifiée.

isKindOfClass: serait le plus proche de instanceof, par ses sons.

37
Jon Skeet

Voir la méthode isKindOfClass: dans la documentation NSObject . (Le mot d'avertissement habituel pour cette question est que vérifier la classe d'objet est souvent le signe de faire quelque chose de mal.)

9
zoul