2010-07-08 40 views
15

所以我正在研究一个简单的iPhone游戏,并试图制作一个本地高分表。我想制作一个数组,并将最高的分数推入其中。下面是我到目前为止的代码:如何在目标c中创建一个CGFloats数组?

CGFloat score; 
    score=delegate.score; 
    NSInteger currentindex=0; 
    for (CGFloat *oldscore in highscores) 
    { 
     if (score>oldscore) 
     { 
      [highscores insertObject:score atIndex:currentindex] 
      if ([highscores count]>10) 
      { 
       [highscores removeLastObject]; 

      } 

     } 
     currentindex+=1; 
    } 

的问题是,高分是一个NSMutableArray,它只能存储对象。所以这里是我的问题,将CGFloats存储在数组中的最佳方式是什么?他们是支持CGFloats的不同类型的数组吗?他们是一种将CGFloat变成对象的简单方法吗?

请不要评论我在应用程序代表中存储分数的事实,我知道这是一个糟糕的主意,但我现在没有心情去做一个单身人士,现在应用程序几乎完成。

+1

使用NSNumber包装CGFloat? – yehnan 2010-07-08 15:09:20

+4

不幸的是,我不知道如何使用NSNumbers,直到下面的好人告诉我。 – meman32 2010-07-08 15:45:50

回答

26

您只能将对象添加到NSArray,因此如果您想要将CGFloat s添加到数组中,则可以使用NSNumber

如:

NSNumber * aNumber = [NSNumber numberWithFloat:aFloat]; 

然后把它找回来:

CGFloat aFloat = [aNumber floatValue]; 
+0

谢谢,我会试试看。 编辑:它工作得很好,谢谢 – meman32 2010-07-08 15:15:50

+6

随着Xcode 4.5,这可以浓缩到'@(floatVariable)'来获得您的NSNumber。例如,'NSNumber * aNumber = @(4.65);' – WDUK 2012-11-27 23:20:30

+1

这是不安全的!现在,iDevices仍然可以使用32位体系结构,但是一旦它们在几年后转向64位,这将会中断。唯一安全的方法是将CFNumber对象与kCFNumberCGFloatType一起使用。 – JanX2 2013-06-05 12:35:22

12

CGFloat即基本数组可以构造是这样的...

CGFloat colors[] = { 1, 0, 0, 1 }; 

,随后“使用“的方式类似于...

CGContextSetFillColor(context, colors); 

OR更简洁,通过铸造)...

CGContextSetFillColor(context, (CGFloat[]){ 1, 0, 0, 1 }); 

C阵列总值我出去......不过这可以通过 “标准©” 来完成!

+3

现在很容易。另一个答案不是“错误的”,更重要的是它是另一种方式来做到这一点(特别是如果你在各地使用物体时更方便)。你的方法会更有效率,但可能不像整个应用程序那样灵活。 – WDUK 2012-11-27 23:24:09

+0

这是暗示的基于C的函数,如“CGColorCreate()”的方式,所以谢谢你提醒我这件事。 – Kirbinator 2013-08-07 20:29:42

相关问题