Что выведет код Middle Замыкания и захват обновлено

Что выведет Swift: ленивость @autoclosure

Вопрос

Что выведет код?

func log(_ enabled: Bool, _ message: @autoclosure () -> String) {
    if enabled { print(message()) }
}

func expensive() -> String {
    print("считаю")
    return "готово"
}

log(false, expensive())
log(true, expensive())

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: считаю, готово. При enabled == false замыкание не вызывается, и expensive() не выполняется вовсе.

Что выведет

считаю
готово

Разбор

При enabled == false замыкание не вызывается, и expensive() не выполняется вовсе. Во втором вызове сначала печатается «считаю» из expensive, затем результат.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.