2011-12-06 9 views
3

フロート値の配列を作成します。これどうやってするの?私のコードは:浮動小数点値でNSArrayを作成するにはどうすればいいですか?

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

あなたの質問は理解できない方が良い説明しようとすることができますか? – shannoga

+0

個人的には、プリミティブ型の方がはるかに適しているため、C-Arrayを使用しています。 –

答えて

3

NSArrayクラスには、他のObjective-Cオブジェクトのインスタンスしか含めることができません。幸運なことに、AppleはすでにCプリミティブ型をカプセル化するためのObjective-Cオブジェクト型をいくつか持っています。たとえば、NSNumberは、さまざまな種類のC数(整数、浮動小数点数など)をカプセル化できます。次のようNSValueは任意の構造、CGPoints、ポインタなどだから、あなたがするNSNumberを使用したNSArrayと一緒に浮くことができincapsulateことができます。

NSArray * myArray; 
NSNumber * myFloatObj = [NSNumber numberWithFloat:3.14]; 
myArray = [NSArray arrayWithObjects:myFloatObj, nil]; 

あなたは、配列の最初のNSNumberから元のfloat値を取得することができます。

NSNumber * theNumber = [myArray objectAtIndex:0]; 
float theFloat = [theNumber floatValue]; 

代わりに、ワンライナーにこれを回すことができます。

float theFloat = [[myArray objectAtIndex:0] floatValue]; 
9

NSArrayはオブジェクトタイプのみです。

NSNumber *floatNumber = [NSNumber numberWithFloat:myFloat]; 
[myArray addObject:floatNumber]; // Assuming `myArray` is mutable. 

そして配列からそのフロートを取得するために:あなたは NSNumberラッパーを使用して NSArrayに様々な非オブジェクトタイプを追加することができます

NSNumber *floatNumber = [myArray objectAtIndex:i]; 
float myFloat = [floatNumber floatValue]; 

(あなたは上記のコードで行われてきたように)。


アップデート:またCGPoint/Size/Rect/AffineTransformUIOffset/EdgeInsetsを含め、様々なAV財団タイプ他の非オブジェクト型、のためにNSNumberと同じようにNSValueラッパーを使用することができます

。または、ポインタや任意のバイトのデータを格納するために使用できます。

3

プリミティブ型は、オブジェクト用のNSArrayには含めることができません。数値の場合は、NSNumberを使用して浮動小数点数をラップします。

NSNumber *n1 = [NSNumber numberWithFloat:1.2f]; 
NSNumber *n2 = [NSNumber numberWithFloat:1.4f]; 

NSArray *array = [NSArray arrayWithObjects:n1, n2, nil]; 
関連する問題