Будет напечатано Swift: capture list [language] сохраняет значение строки при создании замыкания.
Какой результат будет напечатан
Будет напечатано Swift: capture list [language] сохраняет значение строки при создании замыкания.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
var language = "Swift"
let code = { [language] in
print(language)
}
language = "Obj-C"
code()
Ответ
Будет напечатано Swift: capture list [language] сохраняет значение строки при создании замыкания.
Последующее присваивание language = "Obj-C" изменяет внешнюю переменную, но не сохранённую константу захвата. Поэтому вызов code читает старое значение Swift. Если удалить capture list, замыкание обратится к текущему значению внешней изменяемой переменной и напечатает Obj-C. String является типом-значением; возможное внутреннее разделение буфера не меняет наблюдаемый результат.