2010-04-29 3 views
2

в Objective-c У меня есть этот прототип функции: - (NSString *) formatSQL: (NSString *) sql, ... Я могу передать этой функции любой тип параметров : NSString, NSNumber, integer, float Как определить в функции, если параметр является объектом (NSString ..) или примитивным (integer ...)? благодаря BrochPirateobject-c определить, является ли параметр объектом

ответ

5

Если вы собираетесь иметь параметр, который принимает несколько типов, вы можете только безопасно сделать это с помощью объектов Obj-C, что означает использование id в качестве типа. Вы не можете безопасно между смешаться id с float, integer и т.д.

Если вы завернутые все float с и int с в NSNumber с, вы могли бы иметь метод, как так:

- (NSString *)formatSQL:(id)obj 
{ 
    if ([obj isKindOfClass:[NSString class]]) { 
     // Format as a string 
    } 
    else if ([obj isKindOfClass:[NSNumber class]]) { 
     // Further processing will be required to differentiate between ints and floats 
    } 
} 

Есть несколько оговорок к использованию isKindOfClass:, но это должно послужить хорошей отправной точкой.