Назад к вопросам
Junior
132
questionbank

Расскажи о двух семантиках в языке Swift.

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Swift поддерживает семантику копирования (value semantics) и семантику ссылки (reference semantics).

  1. Семантика копирования (Value Semantics):

    • При присваивании или передаче в функцию создается копия значения.
    • Изменение копии не влияет на оригинал.
    • Используется для структур (struct), перечислений (enum) и кортежей (tuple).
    • Гарантирует предсказуемое поведение и потокобезопасность при работе с неизменяемыми данными.
    struct Point {
        var x: Int
        var y: Int
    }
    
    var p1 = Point(x: 1, y: 2)
    var p2 = p1 // Происходит  копирование
    
    p2.x = 10 // Изменяем  копию
    
    print(p1.x) // Выведет 1, оригинал  не изменился
    
  2. Семантика ссылки (Reference Semantics):

    • При присваивании или передаче в функцию передается ссылка на один и тот же объект в памяти.
    • Изменение объекта через любую ссылку влияет на все остальные ссылки на этот же объект.
    • Используется для классов (class).
    • Позволяет использовать наследование и полиморфизм.
    class Circle {
        var radius: Double
    
        init(radius: Double) {
            self.radius = radius
        }
    }
    
    var c1 = Circle(radius: 5.0)
    var c2 = c1 // Происходит  копирование ссылки
    
    c2.radius = 10.0 // Изменяем  объект по ссылке
    
    print(c1.radius) // Выведет 10.0, оригинал  изменился