Sobes.tech
Middle

Ինչու՞ այս կառուցվածքի մեջ չի կարելի հայտարարել այս կառուցվածքի տիպով դաշտ։

sobes.tech AI

Պատասխան AI-ից

Swift- ի կառուցվածքները արժեքների տեսակներ (value types) են: Երբ ստեղծվում է կառուցվածքի օրինակ, հիշողություն է հատկացվում նրա բոլոր դաշտերի համար: Եթե կառուցվածքը կարող է պարունակել նույն տիպի դաշտ, նրա չափը կլինի անսահման, քանի որ դրա ներսում անհրաժեշտ կլինի տեղ հատկացնել նույն կառուցվածքի ևս մեկ օրինակին, որը, իր հերթին, պահանջում է տեղ ևս մեկի համար, և այդպես շարունակ: Դա կբերի ցիկլային կախվածության և կառուցվածքի վերջնական չափը որոշելու անհնարինության:

Ի տարբերություն կառուցվածքների, դասերը (classes) հղման տեսակներ (reference types) են: Դասի դաշտը կարող է պահել նույն դասի օրինակին հղում: Քանի որ դաշտը պահում է միայն հիշողության հասցեն, որը զբաղեցրել է դասի օրինակը, և ոչ ամբողջական օրինակ, անհրաժեշտ չէ իմանալ ամբողջական չափը, երբ սահմանում եք դասի չափը: Հղումները ունեն հաստատված չափ:

Օրինակ, որը ցույց է տալիս կառուցվածքների հետ կապված խնդիրը:

// Այս կառուցվածքը չի կարող կոմպիլացվել
// struct Node {
//     var value: Int
//     var next: Node? // Սխալ! Կառուցվածքը չի կարող պարունակել 'Node' տիպի դաշտ
// }

Որպես լուծում նմանատիպ խնդիրների կառուցվածքների հետ, կարելի է օգտագործել անուղղակի հղումներ, օրինակ, պրոտոկոլների կամ փակման միջոցով, կամ օգտագործել դասեր: Տիպիկ օրինակ են կապակցված ցանկերը, որոնք սովորաբար իրականացվում են դասերով: