У меня есть объект id<NSFastEnumeration>
. Я хочу подсчитать элементы внутри объекта. Как это можно достичь?количество элементов внутри id <NSFastEnumeration>
Единственный метод NSFastEnumeration Реализует:
- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len
Этот метод возвращает количество я ищу, но я не хочу, чтобы на самом деле перечислять объекты интересно, что я мог спокойно пройти в качестве аргументов , Было бы хорошо просто пропустить ноль, ноль, 0? Если нет, что я должен пройти?
Предыстория:
Я хочу создать NSArray из возвращаемых значений функции, которые я хочу, чтобы позвонить с каждым элементом в данной коллекции. Мне нужен массив результатов перечисления коллекции с помощью функции.
id<NSFastEnumeration> enumeratable = someObject;
NSMutableArray* results = [NSMutableArray arrayWithCapacity:(#Fill in count here#)];
for (id object in enumeratable) {
[results addObject:callFunctionOnObject(object)];
}
AS Вы можете видеть, мне нужен только счет, чтобы оптимизировать инициализацию массива. Я прекрасно понимаю, что вместо этого я мог бы использовать NSMutableArray* results = [NSMutableArray array];
.
Спасибо, за ваш ответ. Я знаю, что это всего лишь намек, но потом мне стало любопытно и хотелось узнать. Я буду придерживаться 'NSMutableArray * results = [NSMutableArray array];' then. – tonklon
* Конечно, это означает, что перечислитель будет исчерпан, и вы не сможете его снова зацикливать. Я не могу найти нигде в документах, где говорится, что это правда. – JeremyP
@Jeremy: взгляните на NSEnumerator, который принимает NSFastEnumeration. – kennytm