2012-05-13 9 views
2

をカウントする方法をどのように私はこのようなマクロ定義内の要素の数を取得することができます:はの#defineの要素に

#define myThings @"A",@"B",@"C",@"D",@"E" 

myThingsからの回答5を取得する方法は何ですか?

[myThings count] ...

+0

あなたの '[myThings count]'と '@" A "とnsstringは私たちがObj-Cを扱っていると思うようにします...おそらくそのタグはnsstringよりも適切でしょうか? – ShinTakezou

答えて

1

定義は、テキストのリテラル置換されている動作しません:それは

[@"A", @"B", @"C" count]; 

のようなコードを動作しますが?答えがいいえ、それは動作しない場合は、ここであなたの問題です。あなたはできるでしょう

[[NSArray arrayWithObjects: myThings, nil] count]; 

これはうまくいくはずですが、私はこの "パターン"をまったく使用することを推奨しません。

ADD

以下の可能性があるどのように多くの値をカウントする別の方法:

NSString *arr[] = {myThings}; 
    size_t cnt = sizeof(arr)/sizeof(NSString *); 

これはarrにいるどのように多くの要素を知るためのC一般的な方法です。繰り返しますが、私はmyThings文字通りのあなたは#defineを使用して定義されたものは何でも置き換えられ、そしてその結果は

NSString *arr[] = {@"A", @"B", @"C", @"D", @"E"}; 

ADD2と同じであるという事実を強調している、あなたが勝った場合は」 arrを「本当に」使用すると、最適化によって削除され、「スペースの浪費」はありません。

しかし、別の解決策は、CountingMacro(myThings)が5に置き換えられるように、マクロに渡される引数の数を数えることです。この場合はThis SO answerが役立ちます。

+0

問題は「myThings」がNSStringであるため、カウントが機能しないことです。私は配列を作成したくないだけです(メモリを浪費します)。何をお勧めしますか? – Gik

+0

あなたが書いたように、myThingsはNSStringではありません。NSStringの一般的な区切りリストです(文字通り)。私は別の可能性で答えを更新するつもりです – ShinTakezou

+0

それを得ました。 〜しかし、私の "問題"であなたの提案を聞かせてください:私が欲しいのは、(.hファイル内の)アイテムを定義し、これで使うことです:** segmentedButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects: myThings、nil]]; **しかし、(別のViewController.mファイルで)myThingsの数を知りたい。私はあなたが何を示唆しているのか理解しています(私はそれを行いましたが、それはうまくいきます)。しかし、それが最も効率的な方法であるかどうかを尋ねています。 。より良い方法がありますか? – Gik

関連する問題