如何创建具有浮点值的NSArray

时间:2011-12-06 15:27:14

标签: objective-c floating-point nsarray

我想创建一个浮点值数组。我怎样才能做到这一点?我的代码是:

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

3 个答案:

答案 0 :(得分:9)

NSArray只接受对象类型。您可以使用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/AffineTransformUIOffset/EdgeInsets和各种AV基础类型。或者你可以用它来存储指针或任意字节的数据。

答案 1 :(得分:3)

原始类型不能包含在NSArray中,NSArray仅适用于对象。对于数字,请使用NSNumber来包装浮动。

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

NSArray *array = [NSArray arrayWithObjects:n1, n2, nil];

答案 2 :(得分:3)

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];