Какой результат будет выведен? №17

Будет напечатано 000: оба массива содержат ссылки на один и тот же первый объект Awesome.

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

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

Будет напечатано 000: оба массива содержат ссылки на один и тот же первый объект Awesome.

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

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

Условие

Определите, что напечатает данный Swift‑код при его выполнении.

class Awesome {
    var name: String

    init(name: String) {
        self.name = name
    }
}

let obj1 = Awesome(name: "123")
let obj2 = Awesome(name: "456")

let array1 = [obj1, obj2]
let array2 = array1

array2[0].name = "000"
print(array1[0].name)

Ответ

Будет напечатано 000: оба массива содержат ссылки на один и тот же первый объект Awesome.

Array имеет семантику значения, но его элементы-классы сохраняют ссылочную семантику. Копирование array1 в array2 не создаёт новые экземпляры Awesome. array2[0].name меняет общий объект, который затем читается через array1. Объявление массива через let запрещает изменение самого контейнера, но не mutable-свойств принадлежащих ему ссылочных объектов. Для независимого состояния объектов нужно явное клонирование.

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

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

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

Подробнее