Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СЕССИЯ ОТВЕТЫ / iOS сессия ответы.docx
Скачиваний:
21
Добавлен:
25.12.2020
Размер:
14.45 Mб
Скачать

31. Рекурсивный вызов функций. Безымянные функции.

показан пример инициализации замыкания в параметр closure. При этом у параметра явно указан функциональный тип (ранее в примерах он определялся неявно).

var closure: () -> () = {

print("Замыкающее выражение")

}

closure()

Консоль Замыкающее выражение

Так как данное замыкающее выражение не имеет входных параметров и возвращаемого значения, то его тип равен ()->(). Для вызова записанного в константу замыкающего выражения необходимо написать имя константы с круглыми скобками, точно так же, как мы делали это ранее. Явное указание функционального типа позволяет определить входные аргументы и тип выходного значения

32.Замыкания. Функция как замыкания

Как объясняется в документации к языку Swift, замыкания (closures) — это организованные блоки с определенным функционалом, которые могут быть переданы и использованы в коде. Согласитесь, не очень доступное объяснение. Попробуем иначе.

Замыкания (closure), или замыкающие выражения, — это сгруппированный программный код, который может быть передан в виде параметра и многократно использован. Ничего не напоминает? Если вы скажете, что в этом определении узнали функции, то будете полностью правы.

Как вы знаете, параметры предназначены для хранения информации, а функции могут выполнять определенные задачи. Говоря простым языком, с помощью замыканий вы можете поместить блок исполняемого кода в переменную или константу, свободно передавать ее и при необходимости вызывать хранящийся в ней код. Вы уже видели подобный подход при изучении функций, и в этом нет ничего странного. Дело в том, что функции — это частный случай замыканий. В общем случае замыкание (closure) может принять две формы: ‰ именованная функция; ‰ безымянная функция, определенная с помощью облегченного синтаксиса. Знакомству с именованными функциями была посвящена вся предыдущая глава. Уверен, что вы уже довольно неплохо знакомы с их возможностями.

В дальнейшем безымянные функции будут именоваться замыканиями, или замыкающими выражениями. Говоря о функции, мы будем иметь в виду именно функции, а говоря о замыканиях — о безымянных функциях.

Как вы уже знаете, переменная и константа могут хранить в себе ссылку на функцию. Но для того чтобы организовать это, не обязательно возвращать одну функцию из другой. Вы можете использовать специальный облегченный синтаксис, создав безымянную функцию, после чего передать ее в качестве значения в требуемый параметр. Безымянные функции не имеют имен. Они состоят только из тела, заключенного в фигурные скобки.

{ (входные_параметры) -> тип in

// тело замыкающего выражения

}

  • входные_параметры — список аргументов замыкания с указанием их имен и типов.

• Тип — тип данных значения, возвращаемого замыканием.

Замыкающее выражение пишется в фигурных скобках. После указания перечня входных аргументов и типа возвращаемого значения ставится ключевое слово in, после которого следует тело замыкания. В самом простом случае можно опустить указание входных параметров и тип выходного значения, оставив лишь тело замыкания.

Пример

// безымянная функция в качестве значения константы

let functionInLet = {return true}

// вызываем безымянную функцию

functionInLet() // true

Константа functionInLet имеет функциональный тип () -> Bool (ничего не принимает на вход, но возвращает логическое значение) и хранит в себе тело функции. Обратите внимание, что при инициализации безымянной функции в параметр для ее вызова используется имя параметра с круглыми скобками.

Соседние файлы в папке СЕССИЯ ОТВЕТЫ