Какой вывод получим в этом примере №3

Код не компилируется: firstInt в capture list — захваченная константа структуры, и её свойство нельзя изменить.

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

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

Код не компилируется: firstInt в capture list — захваченная константа структуры, и её свойство нельзя изменить.

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

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

Условие

В данном фрагменте кода демонстрируется, как замыкание захватывает объект структуры и пытается изменить его свойство. Нужно понять, какое значение будет напечатано после выполнения замыкания.

struct IntegerBox {
    var value: Int

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

var firstInt = IntegerBox(10)

let closure = { [firstInt] in
    firstInt.value = 77
}

closure()

print(firstInt.value)

Ответ

Код не компилируется: firstInt в capture list — захваченная константа структуры, и её свойство нельзя изменить.

[firstInt] фиксирует отдельное значение на момент создания closure. Попытка присвоить firstInt.value = 77 нарушает неизменяемость этого захвата, поэтому до print программа не дойдёт. Если убрать capture list, closure сможет изменить исходную var-переменную и результат станет 77. Если внутри создать var copy = firstInt и менять copy, исходное значение останется 10. Это разные требуемые семантики, а не взаимозаменяемые исправления.

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

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

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

Подробнее