Какой будет выведен результат (вариант 2)

Будет напечатано 77: замыкание меняет свойство исходной переменной numberBox, а не отдельной копии структуры.

Короткий ответ

Что ответить на собеседовании

Будет напечатано 77: замыкание меняет свойство исходной переменной numberBox, а не отдельной копии структуры.

Подробный разбор

Ответ с пояснениями

Условие

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

struct IntegerBox {
    var value: Int

    init(_ value: Int) {
        self.value = value
    }
}

var numberBox = IntegerBox(10)

let modify = {
    numberBox.value = 77
}

modify()

print(numberBox.value)

Ответ

Будет напечатано 77: замыкание меняет свойство исходной переменной numberBox, а не отдельной копии структуры.

Замыкание без capture list захватывает доступ к изменяемой переменной. Вызов modify присваивает 77 полю value этой переменной, и последующий print читает обновлённое значение. Хотя IntegerBox — struct, это не означает копирование снимка при каждом обращении из closure. Если бы значение было явно захвачено как [numberBox], оно стало бы отдельной константой захвата и такая запись в его поле напрямую не компилировалась бы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее