В Objective-C, что такое эквивалент ключевого слова Java "instanceof"?
Я хотел бы проверить, является ли объект (например,someObject
) присваиваем (монолитно-состоянии) к переменной другого типа (например,SpecifiedType
). На Java я могу написать:
someObject instanceof SpecifiedType
связанный с этим вопрос заключается в том, является ли тип времени выполнения объекта равным другому типу. На Java я могу написать:
someObject.getClass().equals(SpecifiedType.class)
как это можно сделать в Objective-C?
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 документация. (Обычное слово предупреждения для такого вопроса заключается в том, что проверка класса объектов часто является признаком того, что что-то не так.)