В Objective-C, что является эквивалентом ключевого слова instanceof Java? - PullRequest
184 голосов
/ 11 февраля 2009

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

someObject instanceof SpecifiedType

С этим связан вопрос о том, равен ли тип времени выполнения объекта другому типу. На Java я могу написать:

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

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

Ответы [ 3 ]

257 голосов
/ 11 февраля 2009

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

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

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

, но не с использованием прямого MyClass идентификатора.

Аналогично, вы можете узнать, принадлежит ли объект подклассу вашего класса с помощью:

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

как предложено Джоном Скитом и Зулом.

37 голосов
/ 11 февраля 2009

Из Википедия :

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

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

9 голосов
/ 11 февраля 2009

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

...