Быстрый способ суммировать свойства всех объектов в NSSet?

Я думал, что есть способ быстро спроситьNSSet опросить своих членов и вернуть сумму, скажем,NSInteger свойство в каждом из своих объектов, но я вполне могу спутать это с аспектами Mac OS X. Существует ли это в Cococa Touch?

Самое близкое, что я могу найти, этоobjectEnumeratorЯ полагаю, что я мог бы прокручивать каждый объект и увеличивать свою собственную переменную. Существует ли лучший способ?

 stefanB10 июл. 2009 г., 04:07
Вы говорите о NSArrayController упорядоченных объектах. @ Sum. ... вещи? Я не уверен, как связать его с NSSet и как подсчитать количество конкретных учеников ... Я прочту об этом.

Ответы на вопрос(2)

NSInteger theSum = 0;
for (id obj in theSetOrArray)
    theSum += obj.theIntegerPropertyToSum;

Недостаток: Если вам нравится считать строки, то это выглядит длиннее. Есть ли другие недостатки - интересно, что происходит с методом KVC с объектами, которые не имеют требуемого «theIntegerPropertyToSum»? имущество?

Преимущество: Могу поспорить, что это отладки и тесты производительности проще. Плюс, когда кто-то еще прочитает ваш код через год или два, он узнает, что здесь происходит - видели ли они когда-либо строку цели C или нет, это выглядит так, как на самом деле происходит.

 12 июл. 2009 г., 15:38
Похоже, вы используете KVO все время, а не KVC.
 11 июл. 2009 г., 15:40
Я все время использую KVC - чтобы интерфейс мог общаться с кодом. Недостаток [theSet valueForKeyPath: @ & quot; @ sum.theIntegerPropertyToSum & quot;] заключается в том, что это языковая конструкция, которая не показывает с первого взгляда, что происходит. Любой программист javascript на C, C #, увидевший оператор valueForKeyPath, не поймет его - и будет поглощен уроком, требующим много времени, чтобы выяснить, что делает одна строка кода. Никогда не используйте языковые конструкции, если они вам не нужны. Напоминает мне код на STL C ++, который не читается всеми, кроме экспертов STL.
 25 янв. 2013 г., 21:16
& quot; Никогда не используйте языковые конструкции, если они вам не нужны. & quot;?! Это самая глупая вещь, которую я слышал всю неделю. Конечно, зачем вообще что-то изучать? (Кстати, программист на Си не знает, какое у вас быстрое перечислениеfor цикл тоже есть.) (Кроме того, KVC - это фреймворк, а не язык - обратите внимание, что аргумент - это просто старая строка.)
 10 июл. 2009 г., 10:42
Ваш ответ подразумевает, что вы не использовали или не читали документацию по KVC - вы можете прочитать об этом, прежде чем сказать, что ее не следует использовать. В вашей "простой цели C (2)" Например, что происходит, когда IntegerPropertyToSum не определен или одно значение IntegerPropertyToSum равно -1, а другое - 1,2? Что делать, если это ноль?
Решение Вопроса

theIntegerPropertyToSum) для каждого члена класса, производного от массива / набора, который соответствует KVC (theSet), вы можете сделать следующее:

NSNumber* theSum = [theSet valueForKeyPath:@"@sum.theIntegerPropertyToSum"];
 28 янв. 2013 г., 17:20
Этот код не удобен в обслуживании и может сбить людей с толку.
 25 янв. 2013 г., 21:13
они называются операторами сбора значений кода ключа, и документ трудно найти ...developer.apple.com/library/ios/#documentation/cocoa/conceptual/…
 24 авг. 2014 г., 11:04
Это классная особенность Objective C. Никто не может сделать это в C ++.
 Meltemi15 июл. 2009 г., 07:37
Это замечательно! Где, кстати, это задокументировано? Кажется, я не могу найти что-либо в / вокруг определения & quot; valueForKeyPath: & quot; в справочнике по протоколу KVC ...

Ваш ответ на вопрос