Я новичок в разработке Objective-C и iPhone, и я пытаюсь сохранить значения с плавающей запятой в NSMutableArray, но когда я это сделаю, я получаю сообщение об ошибке "несовместимый тип для аргумента 1 из" addObject ". Что я делаю не так? Я пытаюсь создать массив удвоений, чтобы выполнить математические вычисления с помощью.
Как создать NSMutableArray значений с плавающей запятой
Ответ 1
NSMutableArray содержит только объекты, поэтому вы хотите, чтобы массив был загружен объектами NSNumber. Создайте каждый NSNumber, чтобы удерживать двойной, затем добавьте его в свой массив. Возможно, что-то вроде этого.
NSMutableArray *array = [[NSMutableArray alloc] init];
NSNumber *num = [NSNumber numberWithFloat:10.0f];
[array addObject:num];
Повторите при необходимости.
Ответ 2
Используйте 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, проверьте documentation. Там также NSValue для некоторых структур, таких как NSPoint и NSRect.
Ответ 3
В Cocoa, NSMutableDictionary (и все коллекции, действительно) требуют объектов как значений, поэтому вы не можете просто передать какой-либо другой тип данных. Как предложили sjmulder и Ryan, вы можете обернуть ваши скалярные значения в экземплярах NSNumber (для числа) и NSValue для других объектов.
Если вы представляете десятичное число, для чего-то вроде цены, я бы предложил также посмотреть и использовать NSDecimalNumber. Затем вы можете избежать проблем с неточностями с плавающей запятой, и обычно вы можете использовать и хранить "значение" как NSDecimalNumber вместо того, чтобы представлять его с помощью примитив в коде.
Например:
// somewhere
NSDecimalNumber* price = [[NSDecimalNumber decimalNumberWithString:@"3.50"] retain];
NSMutableArray* prices= [[NSMutableArray array] retain];
// ...
[prices addObject:price];
Ответ 4
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);