Какой результат выведет программа №10

Программа напечатает 1000: hd и cinema ссылаются на один экземпляр класса Resolution.

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

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

Программа напечатает 1000: hd и cinema ссылаются на один экземпляр класса Resolution.

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

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

Условие

В этом примере на Swift объявлен класс Resolution с двумя свойствами width и height. Создаётся экземпляр hd, после чего переменной cinema присваивается ссылка на тот же объект. Далее через переменную cinema изменяется значение свойства width. В конце программы выводится значение width у объекта hd. Определите, какое число будет напечатано.

import UIKit

class Resolution {
    var width = 1920
    var height = 1080
}

var hd = Resolution()
var cinema = hd
cinema.width = 1000

print(hd.width)

Ответ

Программа напечатает 1000: hd и cinema ссылаются на один экземпляр класса Resolution.

Присваивание cinema = hd не клонирует объект. Изменение cinema.width затрагивает тот же экземпляр, который доступен через hd. Если заменить class на struct, присваивание будет иметь семантику копирования значения и исходная ширина hd останется 1920. Объявление переменной через var или let управляет изменяемостью ссылки/значения, но не превращает класс в тип-значение.

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

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

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

Подробнее