Objective-C: Как проверить, является ли переменная объектом, структурой или другим примитивом

Я хочу написать функцию или директиву наподобие NSLog(), которая принимает любые переменные, примитивы и объекты. В этой функции я хочу различать их.

Я знаю, как это работает для объектов:

- (void)test:(id)object {
    if ([object isKindOfClass:[NSString class]])
        ...

но как мне отличить объекты от структур или даже целых чисел или чисел с плавающей запятой. Что-то вроде:

"isKindOfStruct:CGRect" or "isInt" 

например?

Возможно ли это? Я подумал, что если вы можете отправить все в (скрытые) объекты, целые числа, структуры), это должно быть возможно?

Спасибо за любую помощь!

РЕДАКТИРОВАТЬ

Моя конечная цель — реализовать какой-то полиморфизм.

Я хочу иметь возможность вызывать свою функцию:

MY_FUNCTION(int)
MY_FUNCTION(CGRect)
MY_FUNCTION(NSString *)
...

or [self MYFUNCTION:int]...

и в MY_FUNCTION

-(void)MYFUNCTION:(???)value {
    if ([value isKindOf:int])
        ...
    else if ([value isKindOf:CGRect])
        ...
    else if ([value isKindOfClass:[NSString class]])
        ...
 }

я знаю, что isKindOf не существует, и вы даже не можете выполнять такие методы на примитивах. Я также не уверен в "???" общий тип «значения» в заголовке функции.

Это возможно?

7
задан Django 6 April 2012 в 16:01
поделиться