Swift-ingatlan
a Swift 4 nyelv tulajdonságokat biztosít az osztályhoz, a felsoroláshoz vagy a struktúrához az értékek társításához. A tulajdonságok tovább osztályozhatók tárolt tulajdonságokba és számított tulajdonságokba.
a tárolt tulajdonságok és a számított tulajdonságok közötti különbség
tárolt tulajdonság | számított tulajdonság |
---|---|
állandó és változó értékek tárolása példányként | érték kiszámítása az érték tárolása helyett |
osztályok és struktúrák szerint | osztályok, Felsorolások és struktúrák szerint |
mind a tárolt, mind a számított tulajdonságok társítva vannak a példányok típusához. Ha a tulajdonságok társítva vannak a típus értékeivel, akkor a típus tulajdonságai. A tárolt és számított tulajdonságokat általában egy adott típusú példányokhoz társítják. A tulajdonságok azonban magához a típushoz is társíthatók. Az ilyen tulajdonságokat típustulajdonságoknak nevezzük. A
- tulajdonságmegfigyelőket a
- tárolt tulajdonságok értékének megfigyelésére is használják
- a
tárolt tulajdonságok tulajdonságának megfigyelésére
a Swift 4 bevezeti a tárolt tulajdonság fogalmát az állandók és változók példányainak tárolására. Az állandók tárolt tulajdonságait a ‘let’ kulcsszó, a változók tárolt tulajdonságait pedig a ‘var’ kulcsszó határozza meg.
- definíció alatt a tárolt tulajdonság ‘alapértelmezett érték’
- az inicializálás során a felhasználó inicializálhatja és módosíthatja a kezdeti értékeket
struct Number { var digits: Int let pi = 3.1415}var n = Number(digits: 12345)n.digits = 67print("\(n.digits)")print("\(n.pi)")
amikor a fenti programot játszótérrel futtatjuk, a következő eredményt kapjuk−
673.1415
vegye figyelembe a fenti kód következő sorát−
let pi = 3.1415
itt a PI változó tárolt tulajdonságértékként inicializálódik a PI = 3.1415 példával. Tehát, amikor a példányt utalják, csak a 3.1415 értéket fogja tartani.
egy másik módszer, hogy a tárolt tulajdonság, hogy a konstans struktúrák. Tehát a struktúrák teljes példánya az állandók tárolt tulajdonságainak tekinthető.
struct Number { var digits: Int let numbers = 3.1415}var n = Number(digits: 12345)n.digits = 67print("\(n.digits)")print("\(n.numbers)")n.numbers = 8.7
amikor a fenti programot a playground segítségével futtatjuk, a következő eredményt kapjuk−
error: cannot assign to 'numbers' in 'n'n.numbers = 8.7
ahelyett, hogy újra inicializálná a’ számot ‘8.7-re, hibaüzenetet ad vissza, amely jelzi, hogy a’ szám ‘ állandónak van nyilvánítva.
Lazy Stored Property
a Swift 4 rugalmas tulajdonságot biztosít, amelyet Lazy Stored Property-nek hívnak, ahol a változó első inicializálásakor nem számítja ki a kezdeti értékeket. a ‘lazy’ módosítót a változó deklarációja előtt használják, hogy lusta tárolt tulajdonságként legyen.
lusta tulajdonságokat használnak−
- az objektum létrehozásának késleltetése.
- ha a tulajdonság egy osztály más részeitől függ, amelyek még nem ismertek
class sample { lazy var no = number() // `var` declaration is required.}class number { var name = "Swift 4"}var firstsample = sample()print(firstsample.no.name)
amikor a fenti programot játszótérrel futtatjuk, a következő eredményt kapjuk−
Swift 4
Példányváltozók
a C objektívben a tárolt tulajdonságoknak vannak példányváltozói is biztonsági mentés céljából a tárolt tulajdonságban deklarált értékek tárolására.
a Swift 4 mindkét fogalmat egyetlen ‘tárolt tulajdonság’ deklarációba integrálja. A megfelelő példányváltozó és biztonsági másolat érték helyett a ‘tárolt tulajdonság’ tartalmazza az összes integrált információt, amelyet egyetlen helyen definiálnak a változók tulajdonságáról változó neve, adattípusa és memóriakezelési funkciói szerint.
számított tulajdonságok
az értékek tárolása helyett a számított tulajdonságok egy gettert és egy opcionális szettert biztosítanak más tulajdonságok és értékek közvetett lekéréséhez és beállításához.
class sample { var no1 = 0.0, no2 = 0.0 var length = 300.0, breadth = 150.0 var middle: (Double, Double) { get { return (length / 2, breadth / 2) } set(axis){ no1 = axis.0 - (length / 2) no2 = axis.1 - (breadth / 2) } }}var result = sample()print(result.middle)result.middle = (0.0, 10.0)print(result.no1)print(result.no2)
amikor a fenti programot a playground segítségével futtatjuk, a következő eredményt kapjuk−
(150.0, 75.0)-150.0-65.0
ha egy számított tulajdonság az új értéket meghatározatlanként hagyta, akkor az adott változó alapértelmezett értéke lesz beállítva.
számított tulajdonságok csak olvasható tulajdonságként
a számított tulajdonság csak olvasható tulajdonsága getterrel rendelkező, de szetter nélküli tulajdonság. Mindig értéket ad vissza. A változók tovább érhetők el a’.’Szintaxis, de nem állítható be más értékre.
class film { var head = "" var duration = 0.0 var metaInfo: { return }}var movie = film()movie.head = "Swift 4 Properties"movie.duration = 3.09print(movie.metaInfo!)print(movie.metaInfo!)
amikor a fenti programot játszótérrel futtatjuk, a következő eredményt kapjuk−
Swift 4 Properties3.09
számított tulajdonságok mint Tulajdonságmegfigyelők
a Swift 4-ben a tulajdonságértékek megfigyelésére és megválaszolására a Tulajdonságmegfigyelőket használják. Minden egyes alkalommal, amikor a tulajdonságértékek beállítása tulajdonság megfigyelők hívják. A lusta tárolt tulajdonságok kivételével tulajdonságmegfigyelőket adhatunk az ‘örökölt’ tulajdonsághoz a ‘felülbíráló’ módszerrel.
a Tulajdonságmegfigyelők bármelyikével meghatározhatók
-
az érték tárolása előtt-willset
-
az új érték tárolása után – didset
-
ha egy tulajdonság be van állítva egy inicializáló willset és didset megfigyelők nem hívható.
class Samplepgm { var counter: Int = 0 { willSet(newTotal){ print("Total Counter is: \(newTotal)") } didSet { if counter > oldValue { print("Newly Added Counter \(counter - oldValue)") } } }}let NewCounter = Samplepgm()NewCounter.counter = 100NewCounter.counter = 800
amikor a fenti programot játszótérrel futtatjuk, a következő eredményt kapjuk−
Total Counter is: 100Newly Added Counter 100Total Counter is: 800Newly Added Counter 700
lokális és globális változók
lokális és globális változókat deklarálnak a tulajdonságok kiszámításához és megfigyeléséhez.
helyi változók | globális változók |
---|---|
a függvényen belül definiált változók, módszer, vagy bezárási kontextus. | függvényen, metóduson, lezáráson vagy szövegkörnyezeten kívül definiált változók. |
értékek tárolására és lekérésére szolgál. | értékek tárolására és lekérésére szolgál. |
a tárolt tulajdonságok az értékek lekérésére és beállítására szolgálnak. | a tárolt tulajdonságok az értékek lekérésére és beállítására szolgálnak. |
számított tulajdonságokat is használnak. | számított tulajdonságokat is használnak. |
Típus tulajdonságok
a tulajdonságokat a típusdefiníció szakasz határozza meg göndör zárójelekkel {} és a változók hatóköre is meg van határozva korábban. Az értéktípusok típustulajdonságainak meghatározásához a ‘statikus’ kulcsszót, az osztálytípusokhoz pedig az ‘osztály’ kulcsszót használjuk.
szintaxis
struct Structname { static var storedTypeProperty = " " static var computedTypeProperty: Int { // return an Int value here }}enum Enumname { static var storedTypeProperty = " " static var computedTypeProperty: Int { // return an Int value here }}class Classname { class var computedTypeProperty: Int { // return an Int value here }}
lekérdezési és beállítási tulajdonságok
csakúgy, mint a példánytulajdonságok típustulajdonságai lekérdezhetők és ‘ – Val állíthatók be.’Szintaxis csak a típuson, ahelyett, hogy a példányra mutatna.
struct StudMarks { static let markCount = 97 static var totalCount = 0 var InternalMarks: Int = 0 { didSet { if InternalMarks > StudMarks.markCount { InternalMarks = StudMarks.markCount } if InternalMarks > StudMarks.totalCount { StudMarks.totalCount = InternalMarks } } }}var stud1Mark1 = StudMarks()var stud1Mark2 = StudMarks()stud1Mark1.InternalMarks = 98print(stud1Mark1.InternalMarks)stud1Mark2.InternalMarks = 87print(stud1Mark2.InternalMarks)
amikor a fenti programot játszótérrel futtatjuk, a következő eredményt kapjuk −