Программа напечатает 1000: hd и cinema ссылаются на один экземпляр класса Resolution.
Какой результат выведет программа №10
Программа напечатает 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 управляет изменяемостью ссылки/значения, но не превращает класс в тип-значение.