Будет напечатано Mike: personB — отдельное значение структуры, и изменение его name не меняет personA.
Какой текст будет выведен? (пример 19)
Будет напечатано Mike: personB — отдельное значение структуры, и изменение его name не меняет personA.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В Swift структуры являются типами‑значениями. При присвоении одной переменной другой создаётся копия. В приведённом примере создаётся структура Human с полем name. Затем объект копируется, после чего у копии меняется имя. Нужно определить, какое значение будет напечатано в конце.
struct Human {
var name: String
}
var personA = Human(name: "Mike")
var personB = personA
personB.name = "Jack"
print(personA.name)
Ответ
Будет напечатано Mike: personB — отдельное значение структуры, и изменение его name не меняет personA.
Human объявлен как struct, поэтому присваивание personB = personA копирует значение. После personB.name = "Jack" у первой переменной по-прежнему name == "Mike", у второй — "Jack". Внутренние оптимизации хранения строк не меняют эту семантику. Если бы Human был классом, обе переменные могли бы ссылаться на один экземпляр, и результат был бы другим.