Что выведет код Middle Ошибки спрашивают часто обновлено

Что выведет Swift: defer и возвращаемое значение

Вопрос

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

func work() -> Int {
    var x = 1
    defer { print("defer 1, x =", x) }
    defer {
        x += 10
        print("defer 2")
    }
    x = 5
    return x
}

print("result", work())

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

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

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

Коротко

Код выведет: defer 2, defer 1, x = 15, result 5. Возвращаемое значение вычисляется до выполнения defer: функция вернёт 5.

Что выведет

defer 2
defer 1, x = 15
result 5

Разбор

Возвращаемое значение вычисляется до выполнения defer: функция вернёт 5. Затем defer выполняются в обратном порядке: второй увеличивает x до 15, первый печатает 15. И только потом вызывающий печатает результат.

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

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