2

いくつかの対になったオブジェクトを格納して渡す必要があります。

1) NSString「sprite.png」などのファイル名の

2)BOOLそのスプライトをアニメーション化するかどうかの値。

基本的に、私はたくさんのスプライトを持っていて、それぞれがアニメーション化されているかどうかのどちらかです。

を使用しNSDictionaryてすべてを保存できると思って[NSNumber numberWithBool:YES]いましたが、キーとして使用すると、その値を持つ単一のエントリしか持てなくなると思います。

私の要件を満たすことができる、渡すのに最も適した構造はどのようなものですか?

4

4 に答える 4

4

Objective-CはCの厳密なスーパーセットであるため、C構造体を使用できます。例えば:

struct sSpriteDef
{
  BOOL isAnimated;
  NSString *name;
};

typedef struct sSpriteDef SpriteDef;
于 2013-02-04T19:53:20.463 に答える
4

クラスを行います:

@interface SpriteTuple : NSObject 

 @property (assign) BOOL shouldAnimate;
 @property (copy) NSString *filename; 

@end

@implementation

 @synthesize shouldAnimate, filename;

@end

あなたは終わった。個々のハッシュを使用する方法は、やや動的ですが、慣用的ではない方法です。

static NSString *image = @"ImageFileKey";
static NSString *shouldAnimate = @"ShouldAnimateKey";

@{ image: @"path/to/image.png";       shouldAnimate: @(YES) };
@{ image: @"path/to/secondimage.png"; shouldAnimate: @(NO) };
// ...

これは、PythonまたはRubyの誰かがこれを行う方法です...

于 2013-02-04T19:57:43.940 に答える
0

あなたが言っていることは次のとおりだと思います: キー @"spriteName" が値 [NSNumber numberWithBool] にマップされたスプライトがあります。

このコンテナで何をするつもりですか?のように: それは大きな数を保持するつもりですか、それとも小さいですか?(10 未満、配列、ハッシュ、ツリーのように小さい場合、間違いなく短期的には無関係です) 大きな数または未知の場合、あなたが何になるかが重要ですそれを使って最も多くのことをしていますか?-大量の「NSSet」を追加および削除する -比較可能なキー「NSDictionary」で個々のものを多数検索する -リスト全体を何度も反復する「NSArray」など....

など... これらは、コンテナを選択する前に確認する必要がある種類の質問です。Apple の開発者向けリソース サイトには、コンテナ プログラミング ガイドがあり、多かれ少なかれ、どのコンテナが何に適しているかを示しています。

于 2013-02-04T20:26:45.670 に答える
0

私が正しく理解している場合、必要なのはタプルを表す方法です。これを使用して、関連する値のセットを関連付け、メソッドへの引数として一緒に渡したり、オブジェクトのプロパティとして設定したりできます。私はこれに遭遇しました私自身の開発において数え切れないほど質問します。早い段階で、私は NSArray を使用していました。だからあなたの場合、私は言うでしょう:

NSArray *spriteTuple = [NSArray arrayWithObjects:someSpriteImageName,someBoolNSNumber,nil];

そして次のように解凍します:

NSString *name = [spriteTuple objectAtIndex:0];
BOOL animated = [[spriteTuple objectAtIndex:1] boolValue];

ただし、時間の経過とともに常に発生するのは、プロジェクトが進化するにつれて要素の数が増加するため、ペアとして開始したものがトリプレット、クワッドプレット、...になるため、上記のコードは並べ替えのエラーを非常に起こしやすくなります。 .

これを入力しているときにiLuvCapraが提供した答えは、私が今いつもしていることです. NSObject から派生した新しいクラスを作成し、パラメーターをそのプロパティにします。クリーンで拡張可能。

于 2013-02-04T20:06:10.707 に答える