Junior
V čem spočívá rozdíl mezi třídami a strukturami v jazyce Swift?
sobes.tech AI
Odpověď od AI
Třídy jsou referenční typy, struktury jsou hodnotové typy.
Hlavní rozdíly:
- Dědičnost: Třídy podporují dědičnost, struktury ne.
- Typové přetypování: Umožňuje ověřit a interpretovat typ instance třídy za běhu.
- Deinitialization: Třídy mají destruktory (
deinit) pro uvolnění zdrojů, struktury ne. - Počítání odkazů: Třídy používají automatické počítání odkazů (ARC) pro správu paměti. Struktury se kopírují při předání nebo přiřazení (může být použito copy-on-write pro optimalizaci).
- Mutující metody: Metody, které mění vlastnosti instance struktury nebo výčtu, musí být označeny klíčovým slovem
mutating. U tříd to není nutné.
Příklad tvorby:
// Struktura
struct Point {
var x: Int
var y: Int
}
// Třída
class Circle {
var radius: Double
var center: Point
init(radius: Double, center: Point) {
self.radius = radius
self.center = center
}
}
Příklad chování při přiřazení:
// Struktura
var point1 = Point(x: 1, y: 2)
var point2 = point1 // Vytvoří se kopie
point2.x = 10
print(point1.x) // Výstup: 1
// Třída
var circle1 = Circle(radius: 5.0, center: Point(x: 0, y: 0))
var circle2 = circle1 // Odkaz
circle2.radius = 10.0
print(circle1.radius) // Výstup: 10.0