2012-05-13 3 views
2

Как я могу получить число элементов в макроопределения, как это:Как подсчитать элементы в #define

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

Что способ получить ответ 5 из MyThings?

[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 *); 

это C общий способ узнать, сколько элементов в arr. Опять же, я хотел бы подчеркнуть тот факт, что myThings является буквально заменены все, что вы определили его с помощью #define, и поэтому результат такой же, как

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

add2

Обратите внимание, что, если вы выиграли» t используйте arr «для реального», оптимизация удалит его, и нет «пустой траты пространства».

Однако другим решением было бы подсчитать количество аргументов, переданных макросу, так что CountingMacro (myThings) будет заменен на 5. This SO answer может помочь в этом случае.

+0

Проблема в том, что «myThings» - это NSString, поэтому счет не работает. Я не хочу создавать массив, просто чтобы подсчитать их (потеря памяти). Что ты предлагаешь? – Gik

+0

Как вы его написали, myThings не является NSString: это (буквально) общий разделенный список NSString, который отличается! Я собираюсь обновить ответы с другой возможностью. – ShinTakezou

+0

Понял. Thanx. Но позвольте мне затем спросить «ваше предложение» в моей «проблеме»: то, что я хочу, это определить элементы (в файле .h) и использовать их в этом: ** segmentedButton = [[UISegmentedControl alloc] initWithItems: [NSArray arrayWithObjects: myThings, nil]]; ** Но тогда (в другом файле ViewController.m) я хочу узнать количество myThings. Я понимаю, что вы предлагаете (я сделал это, и это работает, конечно), но я спрашиваю, является ли это наиболее эффективным способом сделать это, потому что это похоже на пустую память для создания пространства массива, просто для подсчета элементов , Есть ли способ лучше? – Gik

Смежные вопросы