Перейти к индексу в цикле for-in - PullRequest
1 голос
/ 28 июня 2019

Допустим, у меня есть цикл for-in, подобный этому:

for index in 1...5 {

}

И скажем, я обнаружил, что в индексе 2 я хочу перейти к индексу 4 из-за некоторого условия. Следующее не работает:

for index in 1...5 {
    if index == 2 {
        index = 4
    }
}

Потому что это дает мне следующую ошибку:

Невозможно присвоить значению: 'index' является константой 'let'

Как я могу изменить положение индекса, чтобы перейти к индексу 4?

1 Ответ

2 голосов
/ 28 июня 2019

В цикле for вы не можете переходить по индексу в реальном времени, то есть если вы обнаружите, что после запуска цикла вам нужно пропустить итерацию, вы не сможете. Но вы можете выйти из итерации с continue. Так, например:

var skip = 0
for i in 1...5 {
    if i < skip { continue }
    print(i)
    if i == 2 { skip = 4}
}

Однако в такой ситуации вы могли бы быть счастливее с помощью цикла while.

var i = 1
while i <= 5 {
    print(i)
    i += 1
    if i == 3 { i = 4 }
}

Другая возможность - развернуть цикл for в цикл while:

var r = (1...5).makeIterator()
while let i = r.next() {
    print(i)
    if i == 2 { r.next() }
}

Все это способы печати 1,2,4,5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...