2010-07-08 39 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

相關問題