Zašto u strukturi ne može da se deklarise polje sa tipom iste te strukture?
sobes.tech АИ
Одговор од АИ
Strukture u Swift-u su tipovi vrednosti (value types). Kada se kreira instanca strukture, dodeljuje se memorija za sva njena polja. Ako bi struktura mogla da sadrži polje istog tipa, veličina te strukture bila bi beskonačna, jer bi unutar nje bilo mesta za još jedan primerak iste strukture, koji bi, zauzvrat, zahtevao mesto za još jedan, i tako redom. To bi dovelo do cikličke zavisnosti i nemogućnosti da se odredi konačna veličina strukture.
Za razliku od struktura, klase su tipovi referenci (reference types). Polje klase može da čuva referencu na instancu iste te klase. Pošto polje čuva samo adresu u memoriji koju zauzima instanca klase, a ne samu instancu, nije potrebno znati punu veličinu instance prilikom definisanja veličine klase. Referencije imaju fiksnu veličinu.
Primer koji ilustruje problem sa strukturama:
// Ova struktura ne može biti kompajlirana
// struct Node {
// var value: Int
// var next: Node? // Greška! Struktura ne može sadržati polje tipa 'Node'
// }
Za rešavanje sličnih problema sa strukturama, mogu se koristiti indirektne reference, na primer, putem protokola ili zatvaranja, ili koristiti klase. Tipičan primer su povezane liste, koje se obično implementiraju pomoću klasa.