配列を返す必要がありますが、これを行う方法がわかりません。これがどのように見えるかです
CGPoint position[] = {
CGPointMake(500, 200),
CGPointMake(500, 200)
};
return position;
しかし、互換性のない結果のエラーが発生します。このエラーを回避する方法はありますか?複数のポジションを返す必要があります。
配列を返す必要がありますが、これを行う方法がわかりません。これがどのように見えるかです
CGPoint position[] = {
CGPointMake(500, 200),
CGPointMake(500, 200)
};
return position;
しかし、互換性のない結果のエラーが発生します。このエラーを回避する方法はありますか?複数のポジションを返す必要があります。
あなたはこのようなことをすることができます
NSArray *position = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(500, 200)],
[NSValue valueWithCGPoint:CGPointMake(600, 300)],
nil];
配列から値を取得するため
for(int i=0; i<[position count]; i++) {
NSValue *value = [position objectAtIndex:i];
CGPoint point = [value CGPointValue];
NSLog(@"%@",NSStringFromCGPoint(point);
}
使用したくない場合NSArray
、およびCGPointは構造体であるため、Cの方法で返すことができます。
CGPoint *position = malloc(sizeof(CGPoint)*2);
position[0] = CGPointMake(500,200);
position[1] = CGPointMake(500,200);
return position;
欠点は、呼び出し元の関数が配列内の要素の数を認識していないことですが、他の方法でこれを通知する必要がある場合があります。
また、free()を使用して終了したら、返される配列を解放する必要があります。
使用するNSArray/NSMutableArray
方が便利ですが。
UIKitを使用すると、AppleはNSValueにCGPointのサポートを追加したため、次のことができます。
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(5.5, 6.6)],
[NSValue valueWithCGPoint:CGPointMake(7.7, 8.8)],
nil];
CGPointと同じ数の[NSValue]インスタンスをリストし、リストをnilで終了します。この構造内のすべてのオブジェクトは自動解放されます。
反対に、配列から値を引き出す場合は、次のようにします。
NSValue *val = [points objectAtIndex:0];
CGPoint p = [val CGPointValue];