в Objective-c У меня есть этот прототип функции: - (NSString *) formatSQL: (NSString *) sql, ... Я могу передать этой функции любой тип параметров : NSString, NSNumber, integer, float Как определить в функции, если параметр является объектом (NSString ..) или примитивным (integer ...)? благодаря BrochPirateobject-c определить, является ли параметр объектом
2
A
ответ
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:
, но это должно послужить хорошей отправной точкой.