Так что я играл с чем-то, где тип класса arg неизвестен до времени выполнения.вот так:
- (NSNumber *)doWhatever:(id)arg
{
// this ALWAYS FAILS
if ([arg isKindOfClass:[NSNumber class]]) {
return arg;
}
else {
// what was it???
NSLog("arg klass=%@", [arg class]); // prints NSCFNumber
}
// This check works correctly.
if ([arg isKindOfClass:[NSArray class]]) {
for (id x in arg) {
NSNumber *result = [self doWhatever:x];
if (result) {
return result;
}
}
}
return nil;
}
- (void)someMethod
{
NSArray *myArray = [NSArray arrayFromObjects:[NSNumber numberWithInt:3], nil]];
NSNumber *myNum = [self doWhatever:myArray];
NSLog(@"myNum=%@", myNum);
}
Это, очевидно, надуманный пример того, что я пытаюсь сделать.Дело в том, что это никогда не работает, потому что класс "arg" всегда отображается как NSCFNumber, и я не могу найти способ проверить это.
Любой способ сделать его менее запутанным, чтобы определить,произвольное значение в массиве является целым числом или нет?
Спасибо, Джейми
ОБНОВЛЕНИЕ: Привет, ребята.Спасибо @chuck, @omz и @Nikita Leonov за вашу помощь.То, что я разместил здесь изначально, было просто упрощением проблемы, с которой я столкнулся, и написал ее здесь, не выполняя ее в первую очередь.Этот код, однажды обновленный для устранения ошибок (см. Ниже), на самом деле работает нормально.
Ошибка, которую я допустил в своем реальном коде, с которым у меня возникли проблемы, была столь же глупой - я передавал массив обратно в "doWh независимо "вместо элемента в индексе массива, вот почему у меня возникли проблемы.
Спасибо за попытку помочь, но заблуждаюсь, но мой вопрос был ... Извините за трату времени всех!
Jamie
Исправленный код, который работает по желанию:
- (NSNumber *)doWhatever:(id)arg
{
// this NOW WORKS
if ([arg isKindOfClass:[NSNumber class]]) {
return arg;
}
else {
// what was it???
NSLog(@"arg klass=%@", [arg class]); // prints NSCFNumber
}
// This check works correctly.
if ([arg isKindOfClass:[NSArray class]]) {
for (id x in arg) {
NSNumber *result = [self doWhatever:x];
if (result) {
return result;
}
}
}
return nil;
}
- (void)someMethod
{
NSArray *myArray = [NSArray arrayWithObjects:
[NSNumber numberWithInt:1],
[NSNumber numberWithInt:2],
[NSNumber numberWithInt:3],
[NSNumber numberWithInt:4],
nil];
NSNumber *myNum = [self doWhatever:myArray];
NSLog(@"myNum=%@", myNum);
}