Тестирование по типу класса - PullRequest
4 голосов
/ 25 июня 2009

Когда я отправляю объект в NSLog, я получаю строку с тремя атрибутами. Первый - это класс объекта, второй - это рамка объекта, а третий - это CALayer объекта. Второй и третий атрибуты названы (например, layer =), поэтому я могу назвать их по названию (например, myObject.layer).

Первый нет. Как мне проверить тип класса?

Спасибо!

Ответы [ 3 ]

10 голосов
/ 25 июня 2009

Чтобы получить класс объекта, просто вызовите [myObject class]. Вы можете сравнить это с желаемым классом следующим образом:

if ([myObject class] == [SomeClass class]) { /* ... */ }
if ([myObject class] == [NSString class]) { /* ... */ }

Если вы просто ищете имя класса в виде строки, вы можете использовать функцию NSStringFromClass следующим образом:

NSString * className = NSStringFromClass([myObject class]);
7 голосов
/ 25 июня 2009

Если вы также хотите включить подклассы целевого класса, используйте:

[object isKindOfClass:[SomeClass class]]
3 голосов
/ 25 июня 2009

@ eJames и @ Diederik являются правильными. Однако есть несколько других вариантов, некоторые из которых могут быть предпочтительнее в зависимости от вашего вкуса.

Например, вместо проверки на равенство объектов класса вы также можете использовать -isMemberOfClass:, который исключает подклассы, тогда как -isKindOfClass: и -isSubclassOfClass: нет. (Это определенно тот случай, когда один вариант может быть более интуитивно понятным для некоторых людей, чем для других.)

Кроме того, [SomeClass className] или [anObject className] являются удобными, более короткими способами получения имени класса как NSString. (Я знаю, -className определено в NSObject, и +className работает для прототипов классов, хотя я не могу найти документацию для него с готовностью.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...