Вы находитесь на странице: 1из 7

ЗАМЫКАНИЯ

Заметки
• Closure («замыкание»), часто называют «анонимная функция» (по аналогии с анонимным классом в Java), лямбда-выражения:
• Используется во всех Swift проектах и библиотеках – без понимания замыкания нет смысла идти дальше
• Блок кода, на который можно ссылаться и использовать в любом месте – повышается «динамичность» кода
• Может принимать параметры и возвращать результат
• Функция без имени и ключевого слова func
• Чаще всего – небольшой функционал, который нужно выполнить «на месте» и не создавать для этого отдельную функцию

• Имеет доступ к внешним переменным, где было объявлено замыкание (capture variables)

• По сути замыкания позволяет создавать динамический код

• Часто используется:
• В коллекциях (для сортировки, фильтрации и пр.) для индикации
• Completion Handler – callback-код, который выполняется после успешного завершения функции

• Нет меток параметров как у функций

• Замыкание выполняется в момент использования, а не в момент объявления


Заметки
• Замыкания:
• глобальные функции
• вложенные функции
• функции без имени

• При создании функций с параметром замыкания – желательно, что этот параметр был последним (такой же подход в
API библиотек Swift)

• Главное – понять суть замыкания, а различные «фишки» и возможности можно узнавать со временем

• Замыкание – reference type. Если присвоить одно замыкание двум переменным - они будут ссылаться на одно и то же
замыкание
Trailing closure
• Если замыкание идет последним параметром – синтаксис можно упростить – вынести реализацию замыкания за
скобки
Capture variable
• Замыкание «захватывает переменные» из контекста - capture variables

• Другими словами - замыкание имеет доступ к переменным контекста, где вызывается

• Контекстом может быть любой блок кода, класс, функция и пр. - ограниченная область, где запускается замыкание

• При захвате переменных – замыкание создает ссылки на них - reference type

• captured list – список переменных, для которых нужно создавать копии (в замыкании) вместо ссылок – value type
@autoclosure
• @autoclosure

• Упрощает синтаксис – не нужно указывать фигурные скобки

• Автоматически конвертирует выражение в замыкание

• Позволяет выполнить замыкание не сразу, а в момент вызова

• Ключевое слово @autoclosure - атрибут (аналог аннотации в Java) - доп. информация для компилятора

• Чтобы применить @autoclosure - замыкание должно быть без параметров (но может возвращать любой тип)
Домашнее задание
• Выполнить Hometask

• Прочитать
• https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html