В 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 документация. (Обычное слово предупреждения для такого вопроса состоит в том, что проверка класса объекта часто является признаком того, что что-то не так.)