Swift-Properties

advertenties

Swift 4 language biedt eigenschappen voor klasse, opsomming of structuur om waarden te associëren. Eigenschappen kunnen verder worden geclassificeerd In opgeslagen eigenschappen en berekende eigenschappen.

Verschil tussen Opgeslagen Eigenschappen en de Berekende Eigenschappen

Opgeslagen Goederen Berekend Eigendom
Winkel constante en variabele waarden als bijvoorbeeld het Berekenen van een waarde in plaats van het opslaan van de waarde
Geleverd door klassen en structuren Geleverd door klassen, opsommingen en structuren

Zowel Opgeslagen en Berekend eigenschappen worden geassocieerd met gevallen van het type. Wanneer de eigenschappen worden geassocieerd met zijn typewaarden dan wordt het gedefinieerd als ‘Type Eigenschappen’. Opgeslagen en berekende eigenschappen worden meestal geassocieerd met instanties van een bepaald type. Echter, eigenschappen kunnen ook worden geassocieerd met het type zelf. Dergelijke eigenschappen staan bekend als type eigenschappen. Property observers worden ook gebruikt

  • om de waarde van de opgeslagen eigenschappen
  • waar te nemen om de eigenschap van overgeërfde subklasse afgeleid van superklasse

opgeslagen eigenschappen

Swift 4 introduceert opgeslagen Eigenschapsconcept om de instanties van constanten en variabelen op te slaan. Opgeslagen eigenschappen van constanten worden gedefinieerd door het’ let ‘sleutelwoord en opgeslagen eigenschappen van variabelen worden gedefinieerd door het’ var ‘ sleutelwoord.

  • tijdens definitie de opgeslagen eigenschap geeft ‘standaardwaarde’
  • tijdens initialisatie kan de gebruiker de initiële waarden initialiseren en wijzigen
struct Number { var digits: Int let pi = 3.1415}var n = Number(digits: 12345)n.digits = 67print("\(n.digits)")print("\(n.pi)")

wanneer we het bovenstaande programma uitvoeren met behulp van playground, krijgen we het volgende resultaat−

673.1415

overweeg de volgende regel in de bovenstaande code−

let pi = 3.1415

hier wordt de variabele pi geïnitialiseerd als een opgeslagen eigenschapswaarde met de instantie pi = 3.1415. Dus, wanneer de instantie wordt verwezen zal het de waarde 3.1415 alleen houden.

een andere methode om de eigenschap opgeslagen te hebben, is om als constante structuren te hebben. Dus de hele instantie van de structuren zal worden beschouwd als ‘opgeslagen eigenschappen van constanten’.

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

wanneer we het bovenstaande programma uitvoeren met behulp van playground, krijgen we het volgende resultaat−

error: cannot assign to 'numbers' in 'n'n.numbers = 8.7

in plaats van het opnieuw initialiseren van het ‘nummer’ naar 8.7 zal het een foutmelding die aangeeft dat het ‘nummer’ is gedeclareerd als constant.

Lazy Stored Property

Swift 4 biedt een flexibele eigenschap genaamd ‘Lazy Stored Property’ waar het de beginwaarden niet berekent wanneer de variabele voor het eerst wordt geïnitialiseerd. ‘lazy’ modifier wordt gebruikt voor de variabele declaratie om het te hebben als een lazy opgeslagen eigenschap.

luie eigenschappen worden gebruikt−

  • om de creatie van objecten uit te stellen.
  • wanneer de eigenschap afhankelijk is van andere delen van een klasse, die nog niet bekend zijn
class sample { lazy var no = number() // `var` declaration is required.}class number { var name = "Swift 4"}var firstsample = sample()print(firstsample.no.name)

wanneer we het bovenstaande programma uitvoeren met behulp van playground, krijgen we het volgende resultaat−

Swift 4

Instance variabelen

in Objective C hebben opgeslagen eigenschappen ook instance variabelen voor back-up doeleinden om de waarden op te slaan die zijn gedeclareerd in opgeslagen eigenschap.

Swift 4 integreert beide concepten in één enkele’ opgeslagen eigenschap ‘ – verklaring. In plaats van het hebben van een overeenkomstige instantie variabele en back-up waarde ‘opgeslagen eigenschap’ bevat alle geà ntegreerde informatie gedefinieerd op een enkele locatie over de variabelen eigenschap door variabele naam, data type en geheugen management functionaliteiten.

berekende eigenschappen

in plaats van de waarden op te slaan leveren berekende eigenschappen een getter en een optionele setter om andere eigenschappen en waarden indirect op te halen en in te stellen.

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)

wanneer we het bovenstaande programma uitvoeren met behulp van playground, krijgen we het volgende resultaat−

(150.0, 75.0)-150.0-65.0

wanneer een berekende eigenschap de nieuwe waarde als ongedefinieerd heeft gelaten, wordt de standaardwaarde ingesteld voor die specifieke variabele.

berekende eigenschappen als alleen-lezen eigenschappen

een alleen-lezen eigenschap in berekende eigenschap wordt gedefinieerd als een eigenschap met getter maar geen setter. Het wordt altijd gebruikt om een waarde terug te geven. De variabelen worden verder benaderd via a’.’Syntaxis, maar kan niet worden ingesteld op een andere waarde.

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!)

wanneer we het bovenstaande programma uitvoeren met behulp van playground, krijgen we het volgende resultaat−

Swift 4 Properties3.09

berekende eigenschappen als waarnemer

in Swift 4 om de waarden van de eigenschap waar te nemen en erop te reageren, worden waarnemers van de eigenschap gebruikt. Elke keer als de waarden van de eigenschap zijn ingesteld, worden er waarnemers van de eigenschap opgeroepen. Behalve luie opgeslagen eigenschappen kunnen we eigenschap waarnemers toe te voegen aan ‘geërfd’ eigenschap door de methode ‘overschrijven’.

Property Observers kunnen worden gedefinieerd door:

  • voor het opslaan van de waarde-willset

  • na het opslaan van de nieuwe waarde-didset

  • wanneer een eigenschap is ingesteld in een initializer kunnen willset en didset waarnemers niet worden aangeroepen.

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

wanneer we het bovenstaande programma uitvoeren met behulp van playground, krijgen we het volgende resultaat−

Total Counter is: 100Newly Added Counter 100Total Counter is: 800Newly Added Counter 700

lokale en globale variabelen

lokale en globale variabelen worden gedeclareerd voor het berekenen en observeren van de eigenschappen.

lokale variabelen globale variabelen
variabelen die zijn gedefinieerd binnen een functie, methode of sluitingscontext. variabelen die zijn gedefinieerd buiten functie -, methode -, afsluiting-of typecontext.
gebruikt om waarden op te slaan en op te halen. wordt gebruikt om waarden op te slaan en op te vragen.
opgeslagen eigenschappen wordt gebruikt om de waarden te krijgen en in te stellen. opgeslagen eigenschappen wordt gebruikt om de waarden te verkrijgen en in te stellen.
berekende eigenschappen worden ook gebruikt. berekende eigenschappen worden ook gebruikt.

Type Eigenschappen

eigenschappen zijn gedefinieerd in de sectie Type definitie met accolades {} en de reikwijdte van de variabelen zijn ook eerder gedefinieerd. Voor het definiëren van type eigenschappen voor waarde types ‘statisch’ trefwoord wordt gebruikt en voor klasse types ‘klasse’ trefwoord wordt gebruikt.

syntaxis

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 }}

opvragen en instellen eigenschappen

net zoals bijvoorbeeld Eigenschappen Type eigenschappen worden opgevraagd en ingesteld met’.’Syntaxis alleen op het type alleen in plaats van te wijzen naar de instantie.

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)

als we het bovenstaande programma uitvoeren met playground, krijgen we het volgende resultaat –