target-c определяет, является ли параметр объектом - PullRequest
2 голосов
/ 29 апреля 2010

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

1 Ответ

5 голосов
/ 29 апреля 2010

Если у вас будет параметр, который принимает несколько типов, вы можете безопасно сделать это только с помощью объектов 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:, но это должно послужить хорошей отправной точкой.

...