В Objective-C, что эквивалентно ключевому слову Java "instanceof"?

Я хотел бы проверить, может ли объект (например, someObject) присваиваться (cast-able) переменной другого типа (например, SpecifiedType). В Java я могу написать:

someObject instanceof SpecifiedType

Связанный с этим вопрос заключается в поиске того, является ли тип времени выполнения равным другому типу. В Java я могу написать:

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

Как это сделать в Objective-C?

Ответ 1

Попробуйте [myObject class] для возврата класса объекта.

Вы можете сделать точные сравнения с:

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

но не используя прямой идентификатор MyClass.

Кроме того, вы можете найти, является ли объект подкласса вашего класса:

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

как было предложено Джоном Скитом и зол.

Ответ 2

От Wikipedia:

В Objective-C, например, как общий Object и NSObject (в Cocoa/OpenStep) предоставляют метод isMemberOfClass:, который возвращает true, если аргументом метода является экземпляр указанного класса. метод isKindOfClass: аналогично возвращает true, если аргумент наследует из указанного класса.

isKindOfClass: будет ближе всего к instanceof, звуками его.

Ответ 3

В NSObject документация. (Обычное слово предупреждения для такого вопроса состоит в том, что проверка класса объекта часто является признаком того, что что-то не так.)