Как работать с NSNumber в NSNArray, созданном NSString
У меня есть какой-то метод.
....{
NSString *mean = @"1:1:1:1:1:1:1:1:1";
tab = [self moveSourceArrayToDestinationArray:mean];
....}
-(NSArray*)moveSourceArrayToDestinationArray:(NSString*)sourceArray{
NSArray *destinationArray = [sourceArray componentsSeparatedByString:@":"];
for (NSNumber *number in destinationArray) {
sum += [number doubleValue];
}
NSLog(@"%d", [destinationArray objectAtIndex:1] * 5); // invalid operands to binary expression ('id' and 'int')
return destinationArray;
}
Как я могу сделать что-то математическую операцию над числами в NSArray?
3 ответа
Проще всего получить числовое значение из объекта NSNumber, что вы уже делали в своем фрагменте кода ранее. Например, попробуйте:
NSLog(@"%d", [[destinationArray objectAtIndex:1] intValue] * 5);
См. Полный список функций числового доступа в документации NSNumber в разделе "Доступ к числовым значениям".
Ваша ссылка на NSNumber в вашем коде является ошибкой, и вам повезло, что в вашем коде не возникло непризнанное исключение селектора. Ваш destinationArray
это массив NSStrings, а не NSNumbers. Так уж получилось, что оба NSString
а также NSNumber
иметь doubleValue
а также intValue
методы. Итак, когда вы говорите, [number doubleValue]
в вашем цикле, вы на самом деле в конечном итоге [NSString doubleValue]
который, конечно, по-прежнему возвращает номер, который вы хотите. Однако, если вы попытаетесь позвонить [number shortValue]
, где shortValue
это селектор, который существует только в NSNumber
и не NSString
Ваш код будет генерировать исключение и не работать.
Мораль этого ответа заключается в том, что вы должны удалить любую ссылку на NSNumber в своем коде или фактически преобразовать объекты в destinationArray
на номера NS. В противном случае вы рискуете столкнуться с большим количеством неприятностей.
Ваш объект в [destionationArray objectAtIndex:index]
скорее всего, будет и NSNumber. Поэтому вы должны [[destinationArray objectAtIndex:index] doubleValue]
на данный момент тоже.