Kuidas Swiftis klassi ja struktuuri objekte ligi pääseda?
sobes.tech AI
Vastus AI-lt
Objektide klassid — viitega, struktuuriobjektid — väärtuse järgi:
Klassid (viit tüüp):
Klassi näidisele määramisel muutuja või konstantiga, määratakse viide samale näidisele. Ühe viitega tehtud muudatused kajastuvad kõigis viidetes, mis näitavad sellele näidisele:
class MyClass {
var value: Int = 0
}
let object1 = MyClass() // Näidise loomine
let object2 = object1 // object2 näitab nüüd sama näidist
object1.value = 10 // Muudatus läbi object1
print(object2.value) // Väljundiks on 10 - muudatus on nähtav ka object2 kaudu
Struktuurid (väärtusetüüp):
Struktuuri näidisele määramisel muutuja või konstantiga, luuakse selle näidise koopia. Iga muutuja/konstant sisaldab oma sõltumatut andmekopejat. Muudatused ühes koopias ei mõjuta teisi:
struct MyStruct {
var value: Int = 0
}
var struct1 = MyStruct() // Näidise loomine
var struct2 = struct1 // Koopia loomine
struct1.value = 20 // Muudatus läbi struct1
print(struct2.value) // Väljundiks on 0 - struct2 jäi muutumatuks
Võrdlus:
| Omadus | Klassid | Struktuurid |
|---|---|---|
| Tüüp | viit | väärtus |
| Määramine | viite koopia | väärtuse koopia |
| Muudatused | nähtavad kõigis viidetes | mõjutab ainult koopiat |
| Pärimine | toetatud | mitte toetatud |
| Identiteet | saab kontrollida (===) |
identiteedi kontseptsiooni pole |
Klasside ja struktuuride valik sõltub nõuetest. Struktuure kasutatakse sageli väikeste, lihtsate andmetüüpide jaoks, mis esindavad väärtust (näiteks Point, Size, Range). Klassid on mõeldud keerukamate andmetüüpide jaoks, mis nõuavad viidete semantikat, pärimist või objekti elutsükli haldamist (näiteks UIViewController, UIView).