2009-06-25 6 views
4

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

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

Спасибо!

ответ

10

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

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

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

NSString * className = NSStringFromClass([myObject class]); 
+0

Большое спасибо. Это именно то, что мне нужно. –

+0

Добро пожаловать :) –

7

Если вы также хотите включить подклассы использования целенаправленным класса:

[object isKindOfClass:[SomeClass class]] 
+0

Спасибо. Вы, ребята, потрясающие! –

+0

@Diederik Hoogenboom: Хорошая точка. Я забыл об этом! –

3

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

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

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

Смежные вопросы