Как создать NSMutableArray значений с плавающей запятой
-
20-08-2019 - |
Вопрос
Я новичок в Objective-C и разработке iPhone, и я пытаюсь сохранить значения с плавающей запятой в NSMutableArray, но когда я это делаю, я получаю сообщение об ошибке "несовместимый тип для аргумента 1 'AddObject".Что я делаю не так?Я пытаюсь создать массив двойников, с помощью которых я мог бы выполнять математические вычисления.
Решение
NSMutableArray содержит только объекты, поэтому вы хотите, чтобы массив был загружен объектами NSNumber .Создайте каждый NSNumber для хранения вашего double, а затем добавьте его в свой массив.Возможно, что-то вроде этого.
NSMutableArray *array = [[NSMutableArray alloc] init];
NSNumber *num = [NSNumber numberWithFloat:10.0f];
[array addObject:num];
Повторяйте по мере необходимости.
Другие советы
Используйте NSNumber для переноса вашего значения float , потому что словарю нужен объект:
[myDictionary setObject:[NSNumber numberWithFloat:0.2f] forKey:@"theFloat"];
/* or */
[myDictionary setObject:@0.2f forKey:@"theFloat"];
извлеките его, отправив floatValue:
float theFloat = [[myDictionary objectForKey:@"theFloat"] floatValue];
Код не протестирован.
Вы также можете обернуть многие другие типы данных в NSNumber, проверьте Документация.Есть также Значение для некоторых структур, таких как NSPoint и NSRect.
В Cocoa NSMutableDictionary (и все коллекции, на самом деле) требуют объекты в качестве значений, поэтому вы не можете просто передать какой-либо другой тип данных.Как предложили и sjmulder, и Ryan, вы можете обернуть свои скалярные значения в экземпляры NSNumber (для number) и NSValue для других объектов.
Если вы представляете десятичное число, для чего-то вроде цены, я бы предложил также посмотреть и использовать Десятичное число NSD.Тогда вы сможете избежать проблем с неточностью с плавающей запятой, и вы, как правило, можете использовать и сохранять "значение" как Десятичное число NSD вместо того, чтобы представлять его с помощью примитива в коде.
Например:
// somewhere
NSDecimalNumber* price = [[NSDecimalNumber decimalNumberWithString:@"3.50"] retain];
NSMutableArray* prices= [[NSMutableArray array] retain];
// ...
[prices addObject:price];
NSMutableArray *muArray = [[NSMutableArray alloc] init];
NSNumber *float = [NSNumber numberWithFloat:210.0f];
NSNumber *float1 = [NSNumber numberWithFloat:211.0f];
[muArray addObject:float];
[muArray addObject:float1];
NSlog(@"my array is--%@",muArray);