Sobes.tech
Middle+

Ar Value tipas gali saugoti save patį? Ir ar ši teiginys iš tikrųjų teisingas visiems value tipų atstovams?

sobes.tech AI

Atsakymas iš AI

Ne, reikšmės tipas tiesiogiai negali saugoti savo paties egzemplioriaus. Bandymas apibrėžti struktūroje ar enum'e lauką to paties tipo sukels kompiliatoriaus klaidą, nes tai sukurs begalinį dydį.

Tačiau, reikšmės tipas gali turėti pasirinktą savo egzempliorių (Self?), nuorodą į kito tipo egzempliorių (pavyzdžiui, per klasę) arba naudoti indirection (netiesioginį) enum'uose.

Tai galioja visiems reikšmės tipams (struktūroms ir enum'ams).

Pavyzdys:

// Kompiliatoriaus klaida: reikšmės tipas negali turėti ne-optional savybės savo paties tipo
// struct MyStruct {
//     var myself: MyStruct
// }

// Variantas su pasirinktu
struct MyStructWithOptional {
    var myself: MyStructWithOptional?
}

// Variantas su nuoroda į klasę
class MyClass {}
struct MyStructWithReference {
    var myReference: MyClass
}

// Variantas su indirect enum'u (leidžia rekursinius atvejus)
indirect enum MyEnum {
    case case1
    case case2(MyEnum)
}