Sobes.tech
Junior

V čom spočíva rozdiel medzi triedami a štruktúrami v jazyku Swift?

sobes.tech AI

Odpoveď od AI

Triedy sú referenčné typy, štruktúry sú hodnotové typy.

Hlavné rozdiely:

  • Dedičnosť: Triedy podporujú dedičstvo, štruktúry nie.
  • Typové pretypovanie: Umožňuje overiť a interpretovať typ inštancie triedy počas behu.
  • Deinitialization: Triedy majú destruktory (deinit) na uvoľnenie zdrojov, štruktúry nie.
  • Počítanie odkazov: Triedy používajú automatické počítanie odkazov (ARC) na správu pamäte. Štruktúry sa kopírujú pri prenose alebo priradení (môže sa použiť copy-on-write na optimalizáciu).
  • Mutujúce metódy: Metódy, ktoré menia vlastnosti inštancie štruktúry alebo enumerácie, musia byť označené kľúčovým slovom mutating. Pre triedy to nie je potrebné.

Príklad vytvorenia:

// Štruktúra
struct Point {
    var x: Int
    var y: Int
}

// Trieda
class Circle {
    var radius: Double
    var center: Point

    init(radius: Double, center: Point) {
        self.radius = radius
        self.center = center
    }
}

Príklad správania pri priradení:

// Štruktúra
var point1 = Point(x: 1, y: 2)
var point2 = point1 // Vytvorí sa kópia
point2.x = 10

print(point1.x) // Výstup: 1

// Trieda
var circle1 = Circle(radius: 5.0, center: Point(x: 0, y: 0))
var circle2 = circle1 // Referenčné priradenie
circle2.radius = 10.0

print(circle1.radius) // Výstup: 10.0