Ответ
В Swift функция — это частный случай замыкания. Замыкание — более общая концепция.
Функция: Именованное, самостоятельное замыкание, объявленное с помощью ключевого слова func.
// Именованная функция
func greet(name: String) -> String {
return "Hello, (name)!"
}
Замыкание (Closure): Анонимный блок кода, который может захватывать и хранить ссылки на переменные и константы из окружающего контекста.
// Замыкание (анонимная функция)
let greetClosure = { (name: String) -> String in
return "Hello, (name)!"
}
Ключевые особенности замыканий:
-
Захват контекста (Capture): Замыкание может захватывать и хранить ссылки на переменные из окружающей области видимости, даже если эта область уже прекратила существование.
func makeIncrementer(incrementAmount: Int) -> () -> Int { var total = 0 // Замыкание захватывает переменные `total` и `incrementAmount` let incrementer: () -> Int = { total += incrementAmount return total } return incrementer } -
Синтаксический сахар: Swift предоставляет упрощенный синтаксис для замыканий (trailing closures, shorthand argument names
$0,$1).let numbers = [1, 2, 3] let doubled = numbers.map { $0 * 2 } // Trailing closure с shorthand argument // doubled = [2, 4, 6]
Итог: Все функции в Swift являются замыканиями, но не все замыкания являются именованными функциями. Замыкания — это фундаментальные строительные блоки для асинхронного кода, колбэков и функциональных преобразований (map, filter, reduce).