Swift-egenskaper
Swift 4 språk ger egenskaper för klass, uppräkning eller struktur för att associera värden. Egenskaper kan klassificeras ytterligare i lagrade egenskaper och beräknade egenskaper.
skillnad mellan lagrade egenskaper och beräknade egenskaper
lagrad egendom | Beräknad egendom |
---|---|
lagra konstanta och variabla värden som instans | beräkna ett värde snarare än att lagra värdet |
tillhandahålls av klasser och strukturer | tillhandahålls av klasser, uppräkningar och strukturer |
både lagrade och beräknade egenskaper är associerade med instanstyper. När egenskaperna är associerade med dess typvärden definieras de som Typegenskaper. Lagrade och beräknade egenskaper är vanligtvis associerade med instanser av en viss typ. Egenskaper kan emellertid också associeras med själva typen. Sådana egenskaper är kända som typegenskaper. Egenskapsobservatörer används också
- för att observera värdet på de lagrade egenskaperna
- för att observera egenskapen för ärftlig underklass härledd från superklass
lagrade egenskaper
Swift 4 introducerar lagrad Egenskapskoncept för att lagra instanser av konstanter och variabler. Lagrade egenskaper för konstanter definieras av nyckelordet’ låt ’och lagrade egenskaper för variabler definieras av nyckelordet’ var’.
- under definition lagrad egenskap ger ’standardvärde’
- under initiering kan användaren initiera och ändra de ursprungliga värdena
struct Number { var digits: Int let pi = 3.1415}var n = Number(digits: 12345)n.digits = 67print("\(n.digits)")print("\(n.pi)")
när vi kör ovanstående program med playground får vi följande resultat−
673.1415
Tänk på följande rad i ovanstående kod−
let pi = 3.1415
här initieras variabeln pi som ett lagrat egenskapsvärde med instansen pi = 3.1415. Så, när instansen hänvisas kommer den att hålla värdet 3.1415 ensam.
en annan metod för att ha lagrad egendom är att ha som konstanta strukturer. Så hela förekomsten av strukturerna kommer att betraktas som ’lagrade egenskaper hos konstanter’.
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
när vi kör ovanstående program med playground får vi följande resultat−
error: cannot assign to 'numbers' in 'n'n.numbers = 8.7
istället för att återinitiera ’numret’ till 8.7 kommer det att returnera ett felmeddelande som indikerar att’ numret ’ deklareras som konstant.
Lazy Stored Property
Swift 4 tillhandahåller en flexibel egenskap som heter ’Lazy Stored Property’ där den inte beräknar initialvärdena när variabeln initieras för första gången. ’lazy’ modifierare används före variabeldeklarationen för att ha den som en lazy lagrad egenskap.
Lata egenskaper används−
- för att fördröja skapandet av objekt.
- när egenskapen är beroende av andra delar av en klass, som ännu inte är kända
class sample { lazy var no = number() // `var` declaration is required.}class number { var name = "Swift 4"}var firstsample = sample()print(firstsample.no.name)
när vi kör ovanstående program med playground får vi följande resultat−
Swift 4
instansvariabler
i mål C har lagrade egenskaper också instansvariabler för säkerhetskopiering för att lagra de värden som deklarerats i lagrad egendom.
Swift 4 integrerar båda dessa begrepp i en enda ’lagrad egenskap’ deklaration. Istället för att ha en motsvarande instansvariabel och säkerhetskopiera värdet ’lagrad egenskap’ innehåller all integrerad information som definieras på en enda plats om egenskapen variabler med variabelnamn, datatyp och minneshanteringsfunktioner.
beräknade egenskaper
i stället för att lagra värdena beräknade egenskaper ger en getter och en valfri setter för att hämta och ställa in andra egenskaper och värden indirekt.
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)
när vi kör ovanstående program med playground får vi följande resultat−
(150.0, 75.0)-150.0-65.0
när en beräknad egenskap lämnade det nya värdet som odefinierat kommer standardvärdet att ställas in för den specifika variabeln.
beräknade egenskaper som skrivskyddade egenskaper
en skrivskyddad egenskap i beräknad egenskap definieras som en egenskap med getter men ingen setter. Det används alltid för att returnera ett värde. Variablerna nås ytterligare via a’.’Syntax men kan inte ställas in på ett annat värde.
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!)
när vi kör ovanstående program med playground får vi följande resultat−
Swift 4 Properties3.09
beräknade egenskaper som Egenskapsobservatörer
i Swift 4 för att observera och svara på fastighetsvärden används Egenskapsobservatörer. Varje gång när egenskapsvärden är inställda egenskapsobservatörer kallas. Förutom lata lagrade egenskaper kan vi lägga till egenskapsobservatörer till ’ärvd’ egendom med metoden ’övergripande’.
Egenskapsobservatörer kan definieras av antingen
-
innan du lagrar värdet-willset
-
efter lagring av det nya värdet-didset
-
när en egenskap är inställd i en initializer willset och didset observatörer kan inte anropas.
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
när vi kör ovanstående program med playground får vi följande resultat−
Total Counter is: 100Newly Added Counter 100Total Counter is: 800Newly Added Counter 700
lokala och globala variabler
lokal och global variabel deklareras för beräkning och observation av egenskaperna.
lokala variabler | globala variabler |
---|---|
variabler som definieras inom en funktion, metod eller stängningssammanhang. | variabler som definieras utanför funktion, metod, stängning eller typkontext. |
används för att lagra och hämta värden. | används för att lagra och hämta värden. |
lagrade egenskaper används för att hämta och ställa in värdena. | lagrade egenskaper används för att hämta och ställa in värdena. |
beräknade egenskaper används också. | beräknade egenskaper används också. |
Typegenskaper
egenskaper definieras i avsnittet typdefinition med lockiga hängslen {} och variablernas omfattning definieras också tidigare. För att definiera typegenskaper för värdetyper ’statisk’ sökord används och för klasstyper ’klass’ sökord används.
Syntax
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 }}
fråga och ställa in egenskaper
precis som instans egenskaper typegenskaper frågas och ställs in med ’.’Syntax bara på typen ensam istället för att peka på instansen.
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)
när vi kör ovanstående program med playground får vi följande resultat –