К какому типу (reference/value) относятся функции в Swift?

«К какому типу (reference/value) относятся функции в Swift?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Функции в Swift являются reference type (ссылочным типом).

Почему? При присваивании функции новой переменной или передаче в качестве параметра копируется не тело функции, а ссылка на неё. Это обеспечивает эффективность и позволяет нескольким сущностям использовать один и тот же функциональный объект.

Пример:

func greet() { print("Hello") }
let firstRef = greet
let secondRef = firstRef // Копируется ссылка, а не функция

firstRef()  // Вывод: "Hello"
secondRef() // Вывод: "Hello"
// Обе переменные ссылаются на одну и ту же функцию `greet`.

Практическое следствие: Если бы функции были value type, каждое присваивание создавало бы новую копию, что могло бы негативно сказаться на производительности.