Jak se v jazyce Swift přistupuje k objektům třídy a strukturám?
sobes.tech AI
Odpověď od AI
Třídy (referenční typ):
Při přiřazení instance třídy proměnné nebo konstantě je přiřazena reference na stejnou instanci. Změny provedené přes jednu referenci se projeví ve všech odkazech na tuto instanci.
class MyClass {
var value: Int = 0
}
let object1 = MyClass() // Vytvoření instance
let object2 = object1 // object2 nyní odkazuje na stejnou instanci
object1.value = 10 // Změna přes object1
print(object2.value) // Vypíše 10 - změna je viditelná i přes object2
Struktury (hodnotový typ):
Při přiřazení instance struktury proměnné nebo konstantě je vytvořena kopie této instance. Každá proměnná/konstanta obsahuje svou vlastní nezávislou kopii dat. Změny v jedné kopii neovlivní ostatní.
struct MyStruct {
var value: Int = 0
}
var struct1 = MyStruct() // Vytvoření instance
var struct2 = struct1 // Vytvoření kopie
struct1.value = 20 // Změna přes struct1
print(struct2.value) // Vypíše 0 - struct2 zůstává nezměněna
Porovnání:
| Charakteristika | Třídy | Struktury |
|---|---|---|
| Typ | Referenční | Hodnotový |
| Přiřazení | Kopíruje se reference | Kopíruje se hodnota |
| Změny | Viditelné na všech odkazech | Ovlivní pouze kopii |
| Dědičnost | Podporováno | Nepodporováno |
| Identita | Lze ověřit (===) |
Neexistuje koncept identity |
Volba mezi třídou a strukturou závisí na požadavcích. Struktury jsou často používány pro malé, jednoduché datové typy reprezentující hodnotu (například Point, Size, Range). Třídy jsou používány pro složitější datové typy, které vyžadují referenční semantiku, dědičnost nebo správu životního cyklu objektu (například UIViewController, UIView).