2010-05-17 2 views
2

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

nextObject 

nil, когда все объекты были перечислены. Я надеялся реализовать некоторые «делегат типа» поведение, посредством которой ...

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... 
} 

ответ

3

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

+0

yep ... просто базовая вещь, которую я забыл. Это то, что происходит, когда вы просто используете какао-вызовы безостановочно и забываете основы цикла! –

+0

В частности, Эдвард имеет это право - при назначении -nextObject для 'object', цикл while вычисляет, по существу,« пока есть следующий объект, выполните следующие действия: ». –

2

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

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

2

Перечислитель заканчивается, когда значение, возвращаемое из nextObject является nil

2

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

0

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

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