0Pricing
Swift Academy · Урок

Выход из вложенных циклов

Используйте метки, чтобы выйти сразу из нескольких уровней циклов.

«Выход из вложенных циклов» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Основы break и continue
  2. Именованные инструкции
  3. Выход из вложенных циклов
  4. Управление циклами в контексте switch
← Назад к Swift Academy