Заметки
• Closure («замыкание»), часто называют «анонимная функция» (по аналогии с анонимным классом в Java), лямбда-выражения:
• Используется во всех Swift проектах и библиотеках – без понимания замыкания нет смысла идти дальше
• Блок кода, на который можно ссылаться и использовать в любом месте – повышается «динамичность» кода
• Может принимать параметры и возвращать результат
• Функция без имени и ключевого слова func
• Чаще всего – небольшой функционал, который нужно выполнить «на месте» и не создавать для этого отдельную функцию
• Имеет доступ к внешним переменным, где было объявлено замыкание (capture variables)
• Часто используется:
• В коллекциях (для сортировки, фильтрации и пр.) для индикации
• Completion Handler – callback-код, который выполняется после успешного завершения функции
• При создании функций с параметром замыкания – желательно, что этот параметр был последним (такой же подход в
API библиотек Swift)
• Главное – понять суть замыкания, а различные «фишки» и возможности можно узнавать со временем
• Замыкание – reference type. Если присвоить одно замыкание двум переменным - они будут ссылаться на одно и то же
замыкание
Trailing closure
• Если замыкание идет последним параметром – синтаксис можно упростить – вынести реализацию замыкания за
скобки
Capture variable
• Замыкание «захватывает переменные» из контекста - capture variables
• Контекстом может быть любой блок кода, класс, функция и пр. - ограниченная область, где запускается замыкание
• captured list – список переменных, для которых нужно создавать копии (в замыкании) вместо ссылок – value type
@autoclosure
• @autoclosure
• Ключевое слово @autoclosure - атрибут (аналог аннотации в Java) - доп. информация для компилятора
• Чтобы применить @autoclosure - замыкание должно быть без параметров (но может возвращать любой тип)
Домашнее задание
• Выполнить Hometask
• Прочитать
• https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html