我想创建一个浮点值数组。我怎样才能做到这一点?我的代码是:
NSArray *tmpValue = [[NSArray alloc] init];
total = total + ([[self.closeData objectAtIndex:i]floatValue] - total)* expCarpan;
firstValue = total;
答案 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/AffineTransform
,UIOffset/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];