2012-01-23 26 views
5

我在目標C iPhone開發一件事是初學者,我覺得我做了很多的進出各種NSArrays的花車獲得(和整數)有從數組中獲取浮點數的簡寫方法嗎?

float myFloatValue = [(NSNumber *)[myArray objectAtIndex:integerSelector] floatValue]; 

我明白,我需要做這個拳擊是因爲float(或int)不是一個指針,而NSArray只接受指針。

我只是想知道是否有一點點語法糖來縮短這行代碼 - 主要是因爲當我有幾個數組,我循環他們做一些處理,我發現行開始爲了讓代碼可讀,我必須打破從數組中提取數字的線條 - 然後我有很多的樹形線條傾向於使邏輯更難以遵循。

如C#語言我會寫類似

float myResult = myArray[i] + someOtherArray[i+1]; 

(確定 - 這可能是代碼非常愚蠢的線 - 但是從語法上它很乾淨,我猜是因爲.NET是隱含在那裏做拳擊我不能看到它)

在客觀CI發現自己寫:

float myFloatValue = [(NSNumber *)[myArray objectAtIndex:i] floatValue]; 
float myOtherFloatValue = [(NSNumber *)[someOtherArray objectAtIndex:i+1] floatValue]; 

float myResult = myFloatValue + myOtherFloatValue; 

我只是想知道,如果我在這裏缺少一個竅門鍵入這一切了手寫。我應該使用NSArray的替代方案嗎?有拳擊/拆箱的快捷方式嗎?

或者我想,我應該只是習慣了它,並停止哀;)

+0

不,Objective-C很糟糕。但是如果你只是存儲浮動數據,你可以使用C數組。 C數組的問題是動態內存分配。 – vakio

+0

那麼,至少,你爲什麼要投麼?這不是C++。你可以發送你想要的任何消息給一個'id'對象。 – StilesCrisis

回答

6

您可以創建一個類別:

@class NSArray (FloatHelper) 

- (float) floatAtIndex:(NSUInteger)i; 

@end 

@implementation NSArray (FloatHelper) 

- (float) floatAtIndex:(NSUInteger)i { 
    return [[self objectAtIndex:i] floatValue]; 
} 

@end 

(未經測試並沒有錯誤處理,顯然這是不是一個好主意。)

然後,它可以使用如下:

float a = [array floatAtIndex:1]; 
+0

+1太棒了!我在回答時沒有想過它;-) – EmptyStack

+0

@Stephen:我不確定你在這裏發佈的代碼中發生了什麼 - 例如,myArray從哪裏來的?此外,只是基本的東西 - 如何放置這些聲明。我是一個初學者,目標是C,而且這裏沒有足夠的上下文,我不認爲你有指向教程或文檔的鏈接,這將有助於我更好地理解你的答案。 –

+1

對不起,'myarray'是一個剪貼錯誤。它應該是自我。請參閱此處獲取文檔:http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/chapters/occategories.html –

0

你爲什麼不創建宏

#define _floatValue(array, index) [(NSNumber *)[array objectAtIndex:index] floatValue] 

使用它

float myFloatValue = _floatValue(myArray, i); 
float myOtherFloatValue = _floatValue(someOtherArray, i+1); 
float myResult = myFloatValue + myOtherFloatValue; 

,只是自己停止打擾

+0

誰是那個有趣的傢伙投了我的答案!爲什麼要投票?我的回答真的是一個有害的主意!我不這麼認爲! – EmptyStack

2

我不認爲有對任何速記,順便

float myFloatValue = [[myArray objectAtIndex:i] floatValue]; 

是合法的。

1

您可以創建一個類別,函數或宏,使用較少的冗長代碼來執行此操作。

但是,如果你在一個消耗大量CPU時間的循環(通過使用Instruments進行分析確定)進行此操作,則應考慮使用C數組,以便使用少得多的CPU週期來訪問,從而節省用戶電池壽命。如果您多次觸摸相同的元素,甚至可能會進行優化,以便在執行計算循環之前將所有這些浮點數從NSArray複製到純C浮點數組。