Kaip Swift kalboje prieiti prie klasės ir struktūros objektų?
sobes.tech AI
Atsakymas iš AI
Objektų klasėms — nuoroda, struktūros objektams — reikšmė:
Klasės (nuorodos tipas):
Klasės pavyzdžiui, priskiriant kintamajam ar konstantei, priskiriama nuoroda į tą patį pavyzdį. Pakeitimai, atlikti per vieną nuorodą, bus matomi visuose nuorodose, rodančiose į tą pavyzdį:
class MyClass {
var value: Int = 0
}
let object1 = MyClass() // Pavyzdžio sukūrimas
let object2 = object1 // object2 dabar rodo tą patį pavyzdį
object1.value = 10 // Pakeitimas per object1
print(object2.value) // Išves 10 - pakeitimas matomas per object2
Struktūros (reikšmės tipas):
Priskiriant struktūros pavyzdį kintamajam ar konstantei, sukuriama šio pavyzdžio kopija. Kiekvienas kintamasis/konstanta turi savo nepriklausomą duomenų kopiją. Pakeitimai vienoje kopijoje neįtakoja kitų:
struct MyStruct {
var value: Int = 0
}
var struct1 = MyStruct() // Pavyzdžio sukūrimas
var struct2 = struct1 // Sukuriama struct1 kopija
struct1.value = 20 // Pakeitimas per struct1
print(struct2.value) // Išves 0 - struct2 liko nepakitusi
Palyginimas:
| Savybė | Klasės | Struktūros |
|---|---|---|
| Tipas | nuoroda | reikšmė |
| Priskyrimas | nuorodos kopija | reikšmės kopija |
| Pakeitimai | matomi visuose nuorodose | veikia tik kopijoje |
| Paveldėjimas | palaikomas | nepalaikomas |
| Identifikacija | galima patikrinti (===) |
nėra identifikacijos koncepcijos |
Klasės ir struktūros pasirinkimas priklauso nuo reikalavimų. Struktūros dažnai naudojamos mažiems, paprastiems duomenų tipams, kurie atstovauja reikšmę (pvz., Point, Size, Range). Klasės naudojamos sudėtingesniems duomenų tipams, kuriems reikalinga nuorodų semantika, paveldėjimas ar objekto gyvavimo ciklo valdymas (pvz., UIViewController, UIView).