Swift-Properties
Swift 4 language oferă proprietăți pentru clasă, enumerare sau structură pentru a asocia valori. Proprietățile pot fi clasificate în continuare în proprietăți stocate și proprietăți calculate.
diferența dintre proprietățile stocate și proprietățile calculate
proprietate stocată | proprietate calculată |
---|---|
stocați valori constante și variabile ca instanță | calculați o valoare mai degrabă decât stocarea valorii |
furnizate de clase și structuri | furnizate de clase, enumerări și structuri |
atât proprietățile stocate, cât și cele calculate sunt asociate cu tipul de instanțe. Atunci când proprietățile sunt asociate cu valorile sale de tip, atunci este definit ca’Proprietăți de tip’. Proprietățile stocate și calculate sunt de obicei asociate cu instanțe de un anumit tip. Cu toate acestea, proprietățile pot fi asociate și cu tipul în sine. Astfel de proprietăți sunt cunoscute sub numele de proprietăți de tip. Observatorii de proprietăți sunt, de asemenea, utilizați
- pentru a observa valoarea proprietăților stocate
- pentru a observa proprietatea subclasei moștenite derivate din superclasa
proprietăți stocate
Swift 4 introduce conceptul de proprietate stocată pentru a stoca instanțele constantelor și variabilelor. Proprietățile stocate ale constantelor sunt definite de cuvântul cheie’ let’, iar proprietățile stocate ale variabilelor sunt definite de cuvântul cheie’ var’.
- în timpul definiției proprietatea stocată oferă ‘valoare implicită’
- în timpul inițializării utilizatorul poate inițializa și modifica valorile inițiale
struct Number { var digits: Int let pi = 3.1415}var n = Number(digits: 12345)n.digits = 67print("\(n.digits)")print("\(n.pi)")
când rulăm programul de mai sus folosind playground, obținem următorul rezultat−
673.1415
luați în considerare următoarea linie din Codul de mai sus−
let pi = 3.1415
aici, variabila pi este inițializată ca o valoare de proprietate stocată cu instanța pi = 3.1415. Deci, ori de câte ori instanța este menționată, va deține numai valoarea 3.1415.
o altă metodă de a avea proprietatea stocată este de a avea ca structuri constante. Deci, întreaga instanță a structurilor va fi considerată ca ‘proprietăți stocate ale constantelor’.
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
când rulăm programul de mai sus folosind playground, obținem următorul rezultat−
error: cannot assign to 'numbers' in 'n'n.numbers = 8.7
în loc să reinițializeze ‘ numărul ‘la 8.7, acesta va returna un mesaj de eroare care indică faptul că’ numărul ‘ este declarat constant.
Lazy Stored Property
Swift 4 oferă o proprietate flexibilă numită ‘Lazy Stored Property’ unde nu va calcula valorile inițiale atunci când variabila este inițializată pentru prima dată. modificator ‘lazy’ este folosit înainte de declarația variabilă să-l aibă ca o proprietate Lazy stocate.
se folosesc proprietăți leneșe−
- pentru a întârzia crearea obiectului.
- când proprietatea este dependentă de alte părți ale unei clase, care nu sunt cunoscute încă
class sample { lazy var no = number() // `var` declaration is required.}class number { var name = "Swift 4"}var firstsample = sample()print(firstsample.no.name)
când rulăm programul de mai sus folosind playground, obținem următorul rezultat−
Swift 4
variabilele de instanță
în obiectivul C, proprietățile stocate au, de asemenea, variabile de instanță în scopuri de rezervă pentru a stoca valorile declarate în proprietatea stocată.
Swift 4 integrează ambele concepte într-o singură declarație ‘proprietate stocată’. În loc să aveți o variabilă de instanță corespunzătoare și o valoare de rezervă ‘proprietate stocată’ conține toate informațiile integrate definite într-o singură locație despre proprietatea variabilelor după numele variabilei, tipul de date și funcționalitățile de gestionare a memoriei.
proprietăți calculate
mai degrabă decât stocarea valorilor proprietăți calculate oferi un getter și un setter opțional pentru a prelua și a seta alte proprietăți și valori indirect.
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)
când rulăm programul de mai sus folosind playground, obținem următorul rezultat−
(150.0, 75.0)-150.0-65.0
când o proprietate calculată a lăsat noua valoare ca nedefinită, valoarea implicită va fi setată pentru acea variabilă particulară.
proprietăți calculate ca proprietăți numai în citire
o proprietate numai în citire în proprietatea calculată este definită ca o proprietate cu getter, dar fără setter. Este întotdeauna folosit pentru a returna o valoare. Variabilele sunt accesate în continuare prin a’.’Sintaxă, dar nu poate fi setat la o altă valoare.
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!)
când rulăm programul de mai sus folosind playground, obținem următorul rezultat−
Swift 4 Properties3.09
proprietăți calculate ca observatori de proprietate
în Swift 4 pentru a observa și a răspunde la valorile proprietății se utilizează observatori de proprietate. De fiecare dată când valorile de proprietate sunt stabilite observatori de proprietate sunt numite. Cu excepția proprietăților leneșe stocate, putem adăuga observatori de proprietăți la proprietatea ‘moștenită’ prin metoda ‘overriding’.
observatorii proprietății pot fi definiți fie prin
-
înainte de a stoca valoarea-willset
-
după stocarea noii valori-didset
-
când o proprietate este setată într-un inițializator, observatorii willset și didset nu pot fi apelați.
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
când rulăm programul de mai sus folosind playground, obținem următorul rezultat−
Total Counter is: 100Newly Added Counter 100Total Counter is: 800Newly Added Counter 700
variabilele locale și globale
variabilele locale și globale sunt declarate pentru calcularea și observarea proprietăților.
variabile locale | variabile globale |
---|---|
variabile care sunt definite într-o funcție, metodă sau context de închidere. | variabile care sunt definite în afara funcției, metodei, închiderii sau contextului de tip. |
folosit pentru a stoca și prelua valori. | folosit pentru a stoca și prelua valori. |
proprietățile stocate sunt utilizate pentru a obține și a seta valorile. | proprietăți stocate este folosit pentru a obține și a seta valorile. |
proprietățile calculate sunt de asemenea utilizate. | proprietățile calculate sunt de asemenea utilizate. |
proprietăți Tip
proprietățile sunt definite în secțiunea definiție tip cu acolade {} și domeniul de aplicare al variabilelor sunt, de asemenea, definite anterior. Pentru definirea proprietăților de tip pentru tipurile de valori se folosește cuvântul cheie ‘static’, iar pentru tipurile de clase se folosește cuvântul cheie’ class’.
sintaxă
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 }}
interogarea și setarea proprietăților
la fel ca proprietățile tipului de proprietăți De instanță sunt interogate și setate cu ‘. Sintaxa doar pe tipul singur în loc să indice spre instanță.
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)
când rulăm programul de mai sus folosind playground, obținem următorul rezultat –