Ответ
Нет, value-типы (структуры, перечисления, кортежи) по умолчанию неизменяемы (immutable). Их изменяемость определяется ключевым словом, используемым при объявлении экземпляра: var (изменяемый) или let (неизменяемый).
Ключевое правило:
- Экземпляр, объявленный через
let, нельзя изменить, даже если его свойства объявлены какvar. - Экземпляр, объявленный через
var, можно изменить.
Пример, демонстрирующий семантику копирования:
struct Point {
var x: Int
var y: Int
}
var pointA = Point(x: 1, y: 2) // Изменяемый экземпляр
let pointB = pointA // Создается независимая копия, экземпляр pointB неизменяем
pointA.x = 10 // Разрешено, так как pointA объявлен с 'var'
// pointB.x = 20 // Ошибка компиляции: pointB объявлен с 'let'
print(pointA) // Point(x: 10, y: 2)
print(pointB) // Point(x: 1, y: 2) - копия не изменилась
Почему это важно? Такое поведение обеспечивает предсказуемость и безопасность, предотвращая случайные изменения данных, переданных в разные части программы.