Когда закончится NSEnumerator? - PullRequest
2 голосов
/ 17 мая 2010

Как мы узнаем, когда перечисление закончено? Документы говорят: возвращаемое значение

nextObject

- ноль, когда все объекты были перечислены. Я надеялся реализовать какое-то "делегатоподобное" поведение, в результате чего ...

if (nextObject == nil) { 
    do something because we're done!
}

Но я вижу, что нет такой вещи как:

enumerationDidFinish:

где в следующем блоке я могу проверить, чтобы перечислитель был полным?

NSArray *anArray = // ... ;
NSEnumerator *enumerator = [anArray objectEnumerator];
id object;

while ((object = [enumerator nextObject])) {
    // do something with object...
}

Ответы [ 5 ]

3 голосов
/ 17 мая 2010

Когда цикл while заканчивается, вы знаете, что перечисление завершено. Тогда вы можете вызвать метод делегата.

2 голосов
/ 17 мая 2010

Как насчет сразу после цикла while (). Когда nextObject возвращает nil, перечисление завершено и условие цикла завершается неудачно, продолжая выполнение сразу после цикла тело.

2 голосов
/ 17 мая 2010

Счетчик завершает работу, когда значение, возвращаемое из nextObject, равно nil

2 голосов
/ 17 мая 2010

Просто поместите свой код после всего блока while.

Затем, когда перечисление будет выполнено, оно выполнится, и вы узнаете, что оно достигло конца.

0 голосов
/ 12 февраля 2013

Так как, если возвращенный «объект» равен nil, цикл while не будет продолжать выполнение в теле, он прервется до конца цикла, поместив все, что вы хотите сделать с вашим объектом, было бы неплохо .

...