Как я могу создать NSArray со значениями с плавающей точкой - PullRequest
3 голосов
/ 06 декабря 2011

Я хочу сделать массив значений с плавающей точкой.Как я могу это сделать?Мой код:

NSArray *tmpValue = [[NSArray alloc] init];
total = total + ([[self.closeData objectAtIndex:i]floatValue] - total)* expCarpan;
firstValue = total;

Ответы [ 3 ]

9 голосов
/ 06 декабря 2011

NSArray s принимает только типы объектов. Вы можете добавить различные необъектные типы к NSArray с помощью оболочки NSNumber:

NSNumber *floatNumber = [NSNumber numberWithFloat:myFloat];
[myArray addObject:floatNumber]; // Assuming `myArray` is mutable.

А затем извлечь этот массив из массива:

NSNumber *floatNumber = [myArray objectAtIndex:i];
float myFloat = [floatNumber floatValue];

(Как вы сделали в своем коде выше).


Обновление:

Вы также можете использовать оболочку NSValue таким же образом, как и NSNumber для других необъектных типов, включая CGPoint/Size/Rect/AffineTransform, UIOffset/EdgeInsets и различные типы AV Foundation. Или вы можете использовать его для хранения указателей или произвольных байтов данных.

3 голосов
/ 06 декабря 2011

Класс NSArray может содержать только экземпляры других объектов Objective-C. К счастью, у Apple уже есть несколько типов объектов Objective C для инкапсуляции примитивных типов C. Например, NSNumber может инкапсулировать множество различных типов чисел C (целые числа, числа с плавающей запятой и т. Д.). NSValue может инкапсулировать произвольные структуры, CGPoints, указатели и т. Д. Таким образом, вы можете использовать NSNumber и float вместе с NSArray следующим образом:

NSArray * myArray;
NSNumber * myFloatObj = [NSNumber numberWithFloat:3.14];
myArray = [NSArray arrayWithObjects:myFloatObj, nil];

Затем вы можете получить исходное значение с плавающей точкой из первого NSNumber массива:

NSNumber * theNumber = [myArray objectAtIndex:0];
float theFloat = [theNumber floatValue];

Кроме того, вы можете превратить это в однострочник:

float theFloat = [[myArray objectAtIndex:0] floatValue];
3 голосов
/ 06 декабря 2011

Примитивные типы не могут быть включены в NSArray, который предназначен только для объектов. Для чисел используйте NSNumber, чтобы обернуть ваши поплавки.

NSNumber *n1 = [NSNumber numberWithFloat:1.2f];
NSNumber *n2 = [NSNumber numberWithFloat:1.4f];

NSArray *array = [NSArray arrayWithObjects:n1, n2, nil];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...