Что будет выведено в примере №30

Будет напечатано Buddy1: dog1 и dog2 содержат ссылки на один экземпляр Dog, а не два независимых объекта.

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

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

Будет напечатано Buddy1: dog1 и dog2 содержат ссылки на один экземпляр Dog, а не два независимых объекта.

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

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

Условие

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

import Foundation

class Dog {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var dog1: Dog? = Dog(name: "Buddy")
var dog2: Dog? = dog1

dog1?.name = "Buddy1"
print(dog2?.name ?? "nil")

Определите, какое значение будет напечатано в консоль при выполнении данного кода.

Ответ

Будет напечатано Buddy1: dog1 и dog2 содержат ссылки на один экземпляр Dog, а не два независимых объекта.

Присваивание optional-ссылки копирует значение ссылки, сохраняя общий объект класса. Операция dog1?.name = "Buddy1" изменяет свойство этого экземпляра, поэтому чтение через dog2 видит новое имя. Оператор ?? не используется, поскольку dog2 не равен nil. Если затем присвоить dog1 = nil, объект останется жив, пока его сильно удерживает dog2; это отличается от изменения имени.

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

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

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

Подробнее