Что выведет код Middle Типы значений и ссылочные обновлено
Что выведет Swift: массив объектов после копирования
Вопрос
Что выведет код?
final class User {
var name: String
init(_ name: String) { self.name = name }
}
var a = [User("Аня"), User("Боря")]
var b = a
b[0].name = "Вика"
b.append(User("Гоша"))
print(a.count, a[0].name)
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 2 Вика. Массив копируется по значению: append в b не меняет a, поэтому в a два элемента.
Что выведет
2 Вика
Разбор
Массив копируется по значению: append в b не меняет a, поэтому в a два элемента. Но элементы это ссылки на одни и те же объекты User, и смена имени через b[0] видна через a[0].
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Некопируемые типы ~Copyable в Swift
Следующий вопрос
Что выведет Swift: общий экземпляр класса
Ещё по теме «Типы значений и ссылочные»
- Copy-on-write у Array: когда копируется буфер
- Модификаторы borrowing и consuming
- Как сделать свой copy-on-write
- Existential container: как хранится any Protocol
- Типы значений и ссылочные типы в Swift
- Оператор === в Swift
- Зачем indirect у enum
- Задача на Swift: стек отмены для текстового поля