@autoclosure@autoclosure — это атрибут Swift, который автоматически оборачивает переданное выражение в замыкание, без необходимости писать явный синтаксис замыкания {}.
Поскольку выражение обёрнуто в замыкание, оно не вычисляется сразу — оно выполняется только когда замыкание явно вызывается внутри функции. Это называется ленивым вычислением.
Это особенно полезно, когда выражение требует больших вычислительных затрат или имеет побочные эффекты, которые должны происходить только при определённых условиях.
func log(_ message: @autoclosure () -> String) {
if isDebugMode {
print(message()) // вычисляется только здесь
}
}
log("Value is \(heavyComputation())") // выглядит как обычный аргумент
Без @autoclosure вызывающему коду пришлось бы писать:
log({ "Value is \(heavyComputation())" })
Встроенная функция Swift assert() использует @autoclosure для параметров условия и сообщения об ошибке. В release-сборках замыкание никогда не вызывается, поэтому выражение никогда не вычисляется — это позволяет избежать лишних вычислений и защищает от непредвиденных побочных эффектов.
@autoclosure делает место вызова чище, скрывая синтаксис замыканияАтрибут @autoclosure позволяет функции принимать выражение как аргумент без необходимости явно писать синтаксис замыкания с фигурными скобками.
Новый — ещё не проверен сообществом
Вы