Как я могу получить число элементов в макроопределения, как это:Как подсчитать элементы в #define
#define myThings @"A",@"B",@"C",@"D",@"E"
Что способ получить ответ 5 из MyThings?
[myThings count]
не работает ...
Как я могу получить число элементов в макроопределения, как это:Как подсчитать элементы в #define
#define myThings @"A",@"B",@"C",@"D",@"E"
Что способ получить ответ 5 из MyThings?
[myThings count]
не работает ...
Определяет являются дословным замена текста: она будет работать код, как
[@"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 может помочь в этом случае.
Проблема в том, что «myThings» - это NSString, поэтому счет не работает. Я не хочу создавать массив, просто чтобы подсчитать их (потеря памяти). Что ты предлагаешь? – Gik
Как вы его написали, myThings не является NSString: это (буквально) общий разделенный список NSString, который отличается! Я собираюсь обновить ответы с другой возможностью. – ShinTakezou
Понял. Thanx. Но позвольте мне затем спросить «ваше предложение» в моей «проблеме»: то, что я хочу, это определить элементы (в файле .h) и использовать их в этом: ** segmentedButton = [[UISegmentedControl alloc] initWithItems: [NSArray arrayWithObjects: myThings, nil]]; ** Но тогда (в другом файле ViewController.m) я хочу узнать количество myThings. Я понимаю, что вы предлагаете (я сделал это, и это работает, конечно), но я спрашиваю, является ли это наиболее эффективным способом сделать это, потому что это похоже на пустую память для создания пространства массива, просто для подсчета элементов , Есть ли способ лучше? – Gik
ваш '[myThings count]' и '@" A "и nsstring заставляют меня думать, что мы имеем дело с Obj-C ... возможно, этот тег может быть более уместным, чем nsstring - или числа? – ShinTakezou