hurtig-egenskaber
Hurtig 4 sprog giver egenskaber for klasse, optælling eller struktur til at knytte værdier. Egenskaber kan yderligere klassificeres i lagrede egenskaber og beregnede egenskaber.
forskel mellem lagrede egenskaber og beregnede egenskaber
gemt ejendom | beregnet ejendom |
---|---|
Gem konstante og variable værdier som forekomst | Beregn en værdi i stedet for at gemme værdien |
leveret af klasser og strukturer | leveret af klasser, optællinger og strukturer |
både lagrede og beregnede egenskaber er forbundet med instanser type. Når egenskaberne er knyttet til dens typeværdier, defineres det som ‘typeegenskaber’. Lagrede og beregnede egenskaber er normalt forbundet med forekomster af en bestemt type. Egenskaber kan dog også være forbundet med selve typen. Sådanne egenskaber er kendt som typeegenskaber. Ejendomsobservatører bruges også
- til at observere værdien af de lagrede egenskaber
- til at observere egenskaben for arvet underklasse afledt af superklasse
lagrede egenskaber
Hurtig 4 introducerer lagret Ejendomskoncept til at gemme forekomster af konstanter og variabler. Lagrede egenskaber for konstanter defineres af’ lad ‘nøgleordet, og lagrede egenskaber for variabler defineres af’ var ‘ nøgleordet.
- under definition lagrede ejendom giver’standardværdi’
- under initialisering brugeren kan initialisere og ændre de oprindelige værdier
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ører ovenstående program ved hjælp af legeplads, får vi følgende resultat−
673.1415
overvej følgende linje i ovenstående kode−
let pi = 3.1415
her initialiseres variablen pi som en gemt egenskabsværdi med forekomsten pi = 3.1415. Så når forekomsten henvises, vil den holde værdien 3.1415 alene.
en anden metode til at have lagret ejendom er at have som konstante strukturer. Så hele forekomsten af strukturer vil blive betragtet som ‘lagrede egenskaber af 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ører ovenstående program ved hjælp af legeplads, får vi følgende resultat−
error: cannot assign to 'numbers' in 'n'n.numbers = 8.7
i stedet for at geninitialisere ‘nummeret’ til 8,7 returnerer det en fejlmeddelelse, der angiver, at ‘nummeret’ er erklæret som konstant.
doven gemt ejendom
Hurtig 4 giver en fleksibel egenskab kaldet ‘doven gemt ejendom’, hvor den ikke beregner de oprindelige værdier, når variablen initialiseres for første gang. ‘doven’ modifier bruges før variablen erklæring at have det som en doven gemt ejendom.
dovne egenskaber anvendes−
- at forsinke objektoprettelse.
- når ejendommen er afhængig af andre dele af en klasse, som endnu ikke er kendt
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ører ovenstående program ved hjælp af legeplads, får vi følgende resultat−
Swift 4
instansvariabler
i Mål C har lagrede egenskaber også instansvariabler til sikkerhedskopieringsformål for at gemme de værdier, der er angivet i gemt egenskab.
Hurtig 4 integrerer begge disse begreber i en enkelt ‘lagret egenskab’ erklæring. I stedet for at have en tilsvarende instansvariabel og sikkerhedskopieringsværdi ‘gemt egenskab’ indeholder alle integrerede oplysninger defineret på et enkelt sted om variabelegenskaben efter variabelnavn, datatype og hukommelsesstyringsfunktionaliteter.
beregnede egenskaber
i stedet for at gemme værdierne beregnede egenskaber giver en getter og en valgfri setter til at hente og indstille andre egenskaber og værdier indirekte.
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ører ovenstående program ved hjælp af legeplads, får vi følgende resultat−
(150.0, 75.0)-150.0-65.0
når en beregnet egenskab efterlod den nye værdi som udefineret, indstilles standardværdien for den pågældende variabel.
beregnede egenskaber som skrivebeskyttede egenskaber
en skrivebeskyttet ejendom i beregnet ejendom defineres som en ejendom med getter, men ingen setter. Det bruges altid til at returnere en værdi. Variablerne er yderligere tilgængelige via en’. Syntaks men kan ikke indstilles til en anden værdi.
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ører ovenstående program ved hjælp af legeplads, får vi følgende resultat−
Swift 4 Properties3.09
beregnede egenskaber som Ejendomsobservatører
i Hurtig 4 til at observere og reagere på ejendomsværdier Egenskabsobservatører bruges. Hver gang, når ejendomsværdier er indstillet, kaldes ejendomsobservatører. Bortset fra dovne lagrede egenskaber kan vi tilføje ejendomsobservatører til’ arvet ‘ejendom efter metode’overordnet’.
Ejendomsobservatører kan defineres af enten
-
før du gemmer værdien
-
efter lagring af den nye værdi-didset
-
når en egenskab er angivet i en initialisator, kan observatører ikke kaldes.
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ører ovenstående program ved hjælp af legeplads, får vi følgende resultat−
Total Counter is: 100Newly Added Counter 100Total Counter is: 800Newly Added Counter 700
lokale og globale variabler
lokal og global variabel erklæres for beregning og observation af egenskaberne.
lokale variabler | globale variabler |
---|---|
variabler, der er defineret inden for en funktion, metode eller lukningskontekst. | variabler, der er defineret uden for funktion, metode, lukning eller type kontekst. |
bruges til at gemme og hente værdier. | bruges til at gemme og hente værdier. |
lagrede egenskaber bruges til at hente og indstille værdierne. | lagrede egenskaber bruges til at hente og indstille værdierne. |
beregnede egenskaber anvendes også. | beregnede egenskaber anvendes også. |
typeegenskaber
egenskaber er defineret i afsnittet Typedefinition med krøllede seler {}, og omfanget af variablerne er også defineret tidligere. For at definere type egenskaber for værdityper ‘statisk’ søgeord bruges og for klasse typer ‘klasse’ søgeord bruges.
syntaks
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 }}
forespørge-og Indstillingsegenskaber
ligesom egenskabsegenskaber forespørges og indstilles med ‘.’Syntaks bare på typen alene i stedet for at pege på forekomsten.
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ører ovenstående program ved hjælp af legeplads, får vi følgende resultat –