În Swift, alegerea dintre struct (tip de valoare / Value Type) și class (tip de referință / Reference Type) este o decizie arhitecturală fundamentală. Recomandarea oficială a echipei Swift și fundamentul framework-ului SwiftUI este: folosește structuri în mod implicit, și apelează la clase doar când ai o nevoie specifică de identitate partajată sau ciclu de viață controlat.
Demonstrație: Semantica de Valoare (Struct) vs. Semantica de Referință (Class)
// 1. STRUCT - Value Type (Copiere independentă la atribuire)
struct DocumentStruct {
var titlu: String
}
var docA = DocumentStruct(titlu: "Versiunea 1")
var docB = docA // Se creează o copie independentă!
docB.titlu = "Versiunea 2 Modificată"
print("docA: \(docA.titlu)") // Output: Versiunea 1 (rămâne neschimbat!)
print("docB: \(docB.titlu)") // Output: Versiunea 2 Modificată
// 2. CLASS - Reference Type (Partajarea aceleiași instanțe în memorie)
class DocumentClass {
var titlu: String
init(titlu: String) { self.titlu = titlu }
}
let refA = DocumentClass(titlu: "Original")
let refB = refA // refB indică spre aceeași zonă de memorie Heap ca refA!
refB.titlu = "Modificat prin refB"
print("refA: \(refA.titlu)") // Output: Modificat prin refB (afectat de modificare!)
print("refB: \(refB.titlu)") // Output: Modificat prin refB
| Criteriu | Struct (Value Type) | Class (Reference Type) |
|---|---|---|
| Alocare în memorie | Stivă (Stack) — ultra-rapidă, fără overhead de alocare dinamică. | Grămadă (Heap) — necesită management prin Automatic Reference Counting (ARC). |
| Siguranță concurentă | Inerent sigure (thread-safe): datele sunt copiate, fără stare partajată. | Predispuse la data race dacă sunt accesate concurent din multiple fire. |
| Optimizare Copy-on-Write | Colecțiile standard (Array, Dictionary, String) copiază datele reale doar la prima scriere. | Nu se aplică (orice mutație afectează toți deținătorii referinței). |
| Moștenire | Nu suportă moștenire (folosește protocoale pentru polimorfism). | Suportă moștenire ierarhică (subclasare). |
Întrebări & Exemple de Cod:
Structuri vs. Clase în Swift: Value Types, Copy-on-Write & ARCAi o nelămurire despre utilizarea comenzii
Structuri vs. Clase în Swift: Value Types, Copy-on-Write & ARCsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.