【问题标题】:How can I create an NSArray with float values如何创建具有浮点值的 NSArray
【发布时间】:2012-01-14 04:47:39
【问题描述】:

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

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

【问题讨论】:

  • 您的问题无法理解,您可以尝试解释一下吗?
  • 就我个人而言,我只会将 C-Array 用于原始类型,因为它们更适合这种情况。

标签: objective-c floating-point nsarray


【解决方案1】:

NSArrays 只接受对象类型。您可以使用NSNumber 包装器将各种非对象类型添加到NSArray

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 Foundation 类型。或者您可以使用它来存储指针或任意字节的数据。

【讨论】:

    【解决方案2】:

    原始类型不能包含在 NSArray 中,它仅用于对象。对于数字,使用 NSNumber 来包装你的浮点数。

    NSNumber *n1 = [NSNumber numberWithFloat:1.2f];
    NSNumber *n2 = [NSNumber numberWithFloat:1.4f];
    
    NSArray *array = [NSArray arrayWithObjects:n1, n2, nil];
    

    【讨论】:

      【解决方案3】:

      NSArray 类只能包含其他 Objective-C 对象的实例。幸运的是,Apple 已经有几个用于封装 C 原始类型的 Objective-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];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-04
        • 1970-01-01
        • 1970-01-01
        • 2019-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多