In Objective-C, what is the equivalent of Java's "instanceof" keyword?

Objective CTypesCastingEqualityDowncast

Objective C Problem Overview


I would like to check whether an object (e.g. someObject) is assignable (cast-able) to a variable of another type (e.g. SpecifiedType). In Java, I can write:

someObject instanceof SpecifiedType

A related question is finding whether the runtime type of an object is equal to a another type. In Java, I can write:

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

How can this be done in Objective-C?

Objective C Solutions


Solution 1 - Objective C

Try [myObject class] for returning the class of an object.

You can make exact comparisons with:

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

but not by using directly MyClass identifier.

Similarily, you can find if the object is of a subclass of your class with:

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

as suggested by Jon Skeet and zoul.

Solution 2 - Objective C

From Wikipedia:

> In Objective-C, for example, both the > generic Object and NSObject (in > Cocoa/OpenStep) provide the method > isMemberOfClass: which returns true if > the argument to the method is an > instance of the specified class. The > method isKindOfClass: analogously > returns true if the argument inherits > from the specified class.

isKindOfClass: would be closest to instanceof, by the sounds of it.

Solution 3 - Objective C

See the isKindOfClass: method in the NSObject documentation. (The usual word of warning for such question is that checking the object class is often a sign of doing something wrong.)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDimitrisView Question on Stackoverflow
Solution 1 - Objective CmouvicielView Answer on Stackoverflow
Solution 2 - Objective CJon SkeetView Answer on Stackoverflow
Solution 3 - Objective CzoulView Answer on Stackoverflow