0Pricing
Swift Academy · Урок

Основы замыканий и захвата

Разберитесь с синтаксисом замыканий, сокращёнными аргументами, замыканием в конце вызова, списками захвата и различиями между @escaping и нез escaping-замыканиями.

«Основы замыканий и захвата» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 3 уроков всего.

Введение

В этом уроке представлены замыкания: самостоятельные блоки кода, которые можно передавать. Изучите синтаксис, сокращённые аргументы, замыкания в конце вызова, списки захвата, а также замыкания с возможностью и без возможности выхода за пределы вызова.

Синтаксис замыканий

Замыкания похожи на облегчённые функции. Синтаксис: { (params) -> Return in ... }.

let greet = { (name: String) -> String in
    return "Hello, \\(name)"
}
print(greet("Ada"))

Сокращённые аргументы

Swift предоставляет сокращённые аргументы, такие как $0, $1, чтобы упростить замыкания.

let doubled = [1,2,3].map { $0 * 2 }
print(doubled)

Замыкание в конце вызова

Если замыкание является последним аргументом, его можно записать за скобками: это замыкание в конце вызова.

func operate(_ x: Int, _ y: Int, _ f: (Int,Int)->Int) -> Int {
    return f(x,y)
}
let sum = operate(2,3) { $0 + $1 }
print(sum)

Основы захвата

Замыкания захватывают значения из окружающей области видимости, например счётчик, который увеличивается при каждом вызове.

func makeCounter() -> () -> Int {
    var count = 0
    return {
        count += 1
        return count
    }
}
let counter = makeCounter()
print(counter())  // 1
print(counter())  // 2

Списки захвата и выход за пределы вызова

Используйте списки захвата, например [weak self], чтобы избежать циклов удержания. По умолчанию замыкания не выходят за пределы вызова; указывайте @escaping, если замыкание сохраняется после вызова.

class Greeter {
    var name = "Ada"
    lazy var greet: () -> Void = { [weak self] in
        print("Hello", self?.name ?? "?")
    }
}
let g = Greeter()
g.greet()

Вопрос о списках захвата

Быстрая проверка: какова роль списка захвата?

Итоги

Итоги: замыкания — это встроенные блоки кода. Изучите синтаксис, сокращённые аргументы и замыкания в конце вызова, а захват контролируйте с помощью списков. Замыкания с возможностью выхода живут дольше вызова; без такой возможности используются по умолчанию.

Часто задаваемые вопросы

Урок «Основы замыканий и захвата» бесплатный?

Да — полный текст урока «Основы замыканий и захвата» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 3 уроков всего.

Чему я научусь в уроке «Основы замыканий и захвата»?

Разберитесь с синтаксисом замыканий, сокращёнными аргументами, замыканием в конце вызова, списками захвата и различиями между @escaping и нез escaping-замыканиями. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.

Сколько времени занимает урок «Основы замыканий и захвата»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

  1. Основы замыканий и захвата
  2. Списки захвата — weak/unowned и захват значений
  3. Escaping и нез escaping-замыкания, автозамыкания
← Назад к Swift Academy