Этот вопрос помогает оценить понимание семантики значений и ссылок, которые являются основой работы с данными в Swift.
В Swift есть две семантики: семантика значений (Value Semantics) и семантика ссылок (Reference Semantics). Типы значений (структуры, перечисления) создают копию при передаче, а ссылочные типы (классы) передают указатель на один и тот же объект в памяти.
Типы значений (например, структуры, перечисления и базовые типы, такие как Int, String, Array) используют семантику копирования. Это значит, что при передаче значения в функцию или присваивании переменной создается независимая копия.
Пример:
struct Point {
var x: Int
var y: Int
}
var point1 = Point(x: 0, y: 0)
var point2 = point1 // Создается копия
point2.x = 10
print(point1.x) // 0 — оригинал не изменилсяКлассы используют семантику ссылок. При передаче объекта класса передается указатель на один и тот же объект в памяти. Изменения в одном месте отразятся на всех местах, где используется этот объект.
Пример:
class Point {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
var point1 = Point(x: 0, y: 0)
var point2 = point1 // Ссылка на тот же объект
point2.x = 10
print(point1.x) // 10 — оригинал изменился