Выход из вложенных циклов
Используйте метки, чтобы выйти сразу из нескольких уровней циклов.
«Выход из вложенных циклов» — бесплатный урок Swift Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Проблема вложенных циклов
Обычный break внутри вложенного цикла выходит только из внутреннего цикла, оставляя внешний выполняться.
for i in 1...3 {
for j in 1...3 {
if j == 2 { break }
print(i, j)
}
}Именованный break решает проблему
Добавьте метку к внешнему циклу и используйте break outer, чтобы одновременно выйти из обоих циклов.
outer: for i in 1...3 {
for j in 1...3 {
if i == 2 && j == 2 { break outer }
print(i, j)
}
}
print("escaped")Поиск в двумерной сетке
Именованный break идеально подходит для остановки двумерного поиска сразу после обнаружения цели.
let grid = [[1, 2, 3], [4, 5, 6]]
var position = (-1, -1)
find: for r in 0..<grid.count {
for c in 0..<grid[r].count {
if grid[r][c] == 5 {
position = (r, c)
break find
}
}
}
print(position)Без меток: флаг
Альтернативный вариант без меток использует логический флаг, но получается более многословным и подверженным ошибкам.
var stop = false
for i in 1...3 {
for j in 1...3 {
if i + j == 4 { stop = true; break }
print(i, j)
}
if stop { break }
}Метки делают код чище
По сравнению с флагами именованный break непосредственно выражает намерение и устраняет дополнительные проверки после внутреннего цикла.
outer: for i in 1...3 {
for j in 1...3 {
if i + j == 4 { break outer }
print(i, j)
}
}Тройная вложенность
Метки подходят для трёх и более уровней; укажите любой цикл, из которого требуется выйти.
top: for a in 1...2 {
for b in 1...2 {
for c in 1...2 {
if c == 2 { break top }
print(a, b, c)
}
}
}Именованный continue во вложенности
Используйте continue label, чтобы из глубоко вложенного кода перейти к следующей итерации внешнего цикла.
rows: for r in 1...3 {
for c in 1...3 {
if c == 2 { continue rows }
print(r, c)
}
}Сочетание обоих вариантов
В одной вложенной структуре можно сочетать именованные break и continue для точного управления.
scan: for i in 1...3 {
for j in 1...3 {
if j == 1 { continue }
if i == 3 { break scan }
print(i, j)
}
}Производительность досрочного выхода
Выход сразу после обнаружения ответа позволяет избежать лишних итераций на больших наборах данных.
let data = Array(1...100)
var firstBig = -1
loop: for chunk in stride(from: 0, to: data.count, by: 10) {
for k in chunk..<min(chunk + 10, data.count) {
if data[k] > 25 {
firstBig = data[k]
break loop
}
}
}
print(firstBig)Возврат из функции
Внутри функции return — ещё один удобный способ сразу выйти из всех циклов.
func findPair(_ target: Int) -> (Int, Int)? {
for i in 1...5 {
for j in 1...5 {
if i * j == target { return (i, j) }
}
}
return nil
}
print(findPair(12) ?? (-1, -1))Выбор подхода
Предпочитайте именованный break для выхода из вложенных циклов на месте, а return используйте внутри функции, если требуется полностью выйти из неё.
outer: for x in 1...3 {
for y in 1...3 {
if x * y >= 4 { break outer }
print(x, y)
}
}Быстрая проверка
Проверьте управление вложенными циклами.
Итоги
Обычный break выходит только из самого внутреннего цикла. Пометьте внешний цикл и используйте break label, чтобы сразу выйти со всех уровней; это чище, чем логический флаг. Внутри функции return также завершает всё выполнение.
outer: for i in 1...3 {
for j in 1...3 {
if j == 2 { break outer }
print(i, j)
}
}Часто задаваемые вопросы
Урок «Выход из вложенных циклов» бесплатный?
Да — полный текст урока «Выход из вложенных циклов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «Выход из вложенных циклов»?
Используйте метки, чтобы выйти сразу из нескольких уровней циклов. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Выход из вложенных циклов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы break и continue
- Именованные инструкции
- Выход из вложенных циклов
- Управление циклами в контексте switch