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


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

someObject instanceof SpecifiedType

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

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

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

3 183

3 ответа:

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

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

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

но не с помощью непосредственно MyClass идентификатор.

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

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

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

С Википедия:

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

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

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