2010-08-12 5 views
11

Существует ли сопоставимая функция с 'isKindOfClass:' для сравнения «класса» с другим (т. Е. Без создания экземпляра любого класса). Например, данные:Сравнение «класса» с другим «классом» в Objective-C

Class class = NSClassFromString(@"NSNumber"); 

[NSNumber isKindOfClass:class]; // YES 
[NSString isKindOfClass:class]; // NO 

Спасибо!

ответ

21

+ (BOOL)isSubclassOfClass:(Class)aClass

и

Class theClass = NSClassFromString(@"NSNumber"); 

if ([NSNumber class] == theClass) { 
    // YES 
} 

Там никогда не более чем 1 экземпляр класса, поэтому == является оператором, что вы ищете.

+0

Привет, Георг. Второй пример приводит к ошибке компиляции «Ожидаемое выражение перед« NSNumber », однако первый работает! Знаете ли вы, можно ли ограничить, чтобы не включать подклассы? Благодаря! –

+1

оператор if должен быть 'if ([NSNumber class] == class)'. Для получения дополнительной информации см. Http://stackoverflow.com/questions/3107213 –

+0

@Kevin: Исправлено это, я должен был проверить его раньше. Сожалею. –

5

Да, вы можете сделать:

[NSNumber isSubclassOfClass:class]; //YES 
[NSString isSubclassOfClass:class]; //NO 

Эти методы класса на NSObject.

+0

Спасибо Дэйв. Можно ли ограничить не включать подклассы? Благодарю. –

+0

@ Kevin as @Georg указывает, вы можете сделать: '[NSNumber class] == class' –

+0

Ах круто! Спасибо Дэйву! –

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