Swift-Properties
Il linguaggio Swift 4 fornisce proprietà per classe, enumerazione o struttura per associare i valori. Le proprietà possono essere ulteriormente classificate in proprietà memorizzate e proprietà calcolate.
Differenza tra Memorizzati Proprietà e la Proprietà
Memorizzati Proprietà | Calcolata Proprietà |
---|---|
Archivio costante e valori di variabile di istanza | Calcolare un valore, piuttosto che la memorizzazione del valore |
Fornito da classi e strutture | Forniti dalle classi, enumerazioni e strutture |
Entrambi Memorizzati e la proprietà sono associati con istanze di tipo. Quando le proprietà sono associate ai suoi valori di tipo, vengono definite come “Proprietà di tipo”. Le proprietà memorizzate e calcolate sono solitamente associate a istanze di un particolare tipo. Tuttavia, le proprietà possono anche essere associate al tipo stesso. Tali proprietà sono note come proprietà del tipo. Vengono utilizzati anche osservatori di proprietà
- Per osservare il valore delle proprietà memorizzate
- Per osservare la proprietà della sottoclasse ereditata derivata dalla superclasse
Proprietà memorizzate
Swift 4 introduce il concetto di proprietà memorizzate per memorizzare le istanze di costanti e variabili. Le proprietà memorizzate delle costanti sono definite dalla parola chiave ‘ let ‘e le proprietà memorizzate delle variabili sono definite dalla parola chiave’ var’.
- Corso di definizione Archiviata la struttura fornisce un ‘valore di default’
- Durante l’Inizializzazione, l’utente può inizializzare e modificare i valori iniziali
struct Number { var digits: Int let pi = 3.1415}var n = Number(digits: 12345)n.digits = 67print("\(n.digits)")print("\(n.pi)")
Quando si esegue il programma di cui sopra utilizzando giochi, otteniamo il seguente risultato−
673.1415
si Consideri la seguente riga nel codice di cui sopra−
let pi = 3.1415
Qui, la variabile pi è inizializzato come una stored valore della proprietà con l’esempio pi = 3.1415. Quindi, ogni volta che viene riferita l’istanza, manterrà il valore 3.1415 da solo.
Un altro metodo per avere proprietà memorizzate è avere come strutture costanti. Quindi l’intera istanza delle strutture sarà considerata come “Proprietà memorizzate delle costanti”.
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
Quando eseguiamo il programma sopra utilizzando playground, otteniamo il seguente risultato−
error: cannot assign to 'numbers' in 'n'n.numbers = 8.7
Invece di reinizializzare il ‘numero’ a 8.7 restituirà un messaggio di errore che indica che il ‘numero’ è dichiarato come costante.
Lazy Stored Property
Swift 4 fornisce una proprietà flessibile chiamata “Lazy Stored Property” in cui non calcola i valori iniziali quando la variabile viene inizializzata per la prima volta. il modificatore ‘lazy’ viene utilizzato prima della dichiarazione della variabile per averlo come proprietà memorizzata lazy.
Vengono utilizzate le proprietà Lazy−
- Per ritardare la creazione di oggetti.
- Quando la proprietà è dipendente da altre parti di una classe, che non sono ancora noti
class sample { lazy var no = number() // `var` declaration is required.}class number { var name = "Swift 4"}var firstsample = sample()print(firstsample.no.name)
Quando si esegue il programma di cui sopra utilizzando giochi, otteniamo il seguente risultato−
Swift 4
le Variabili di Istanza
Objective C, Memorizzati proprietà hanno anche le variabili di istanza per il back-up per memorizzare i valori dichiarati in memorizzate proprietà.
Swift 4 integra entrambi questi concetti in un’unica dichiarazione di “proprietà memorizzata”. Invece di avere una variabile di istanza corrispondente e il valore di backup’ stored property ‘ contiene tutte le informazioni integrate definite in un’unica posizione sulla proprietà delle variabili per nome della variabile, tipo di dati e funzionalità di gestione della memoria.
Proprietà calcolate
Invece di memorizzare i valori le proprietà calcolate forniscono un getter e un setter opzionale per recuperare e impostare altre proprietà e valori indirettamente.
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)
Quando eseguiamo il programma sopra utilizzando playground, otteniamo il seguente risultato−
(150.0, 75.0)-150.0-65.0
Quando una proprietà calcolata ha lasciato il nuovo valore come indefinito, il valore predefinito verrà impostato per quella particolare variabile.
Proprietà calcolate come proprietà di sola lettura
Una proprietà di sola lettura nella proprietà calcolata è definita come una proprietà con getter ma nessun setter. Viene sempre utilizzato per restituire un valore. Le variabili sono ulteriormente accessibili attraverso un’.’Sintassi ma non può essere impostata su un altro valore.
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!)
Quando eseguiamo il programma sopra utilizzando playground, otteniamo il seguente risultato−
Swift 4 Properties3.09
Proprietà calcolate come osservatori di proprietà
In Swift 4 per osservare e rispondere ai valori delle proprietà Vengono utilizzati osservatori di proprietà. Ogni volta che vengono impostati i valori delle proprietà vengono chiamati osservatori di proprietà. Ad eccezione delle proprietà memorizzate pigre, possiamo aggiungere osservatori di proprietà alla proprietà ‘ ereditata ‘con il metodo’override’.
Proprietà Osservatori possono essere definiti da
-
Prima di Memorizzare il valore willset
-
Dopo aver memorizzato il nuovo valore – didset
-
Quando una proprietà è immersa in un inizializzatore willset e didset osservatori può essere chiamato.
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
Quando eseguiamo il programma sopra usando playground, otteniamo il seguente risultato−
Total Counter is: 100Newly Added Counter 100Total Counter is: 800Newly Added Counter 700
Le variabili locali e globali
Le variabili locali e globali sono dichiarate per calcolare e osservare le proprietà.
Variabili locali | Variabili globali |
---|---|
Variabili definite all’interno di una funzione, un metodo o un contesto di chiusura. | Variabili definite al di fuori della funzione, del metodo, della chiusura o del contesto di tipo. |
Utilizzato per memorizzare e recuperare i valori. | Utilizzato per memorizzare e recuperare i valori. |
Stored properties viene utilizzato per ottenere e impostare i valori. | Stored properties viene utilizzato per ottenere e impostare i valori. |
Vengono utilizzate anche proprietà calcolate. | Vengono utilizzate anche le proprietà calcolate. |
Proprietà del tipo
Le proprietà sono definite nella sezione Definizione del tipo con parentesi graffe {} e anche l’ambito delle variabili sono definiti in precedenza. Per definire le proprietà del tipo per i tipi di valore viene utilizzata la parola chiave ‘ static ‘e per i tipi di classe viene utilizzata la parola chiave’ class’.
Sintassi
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 }}
Interrogazione e impostazione delle proprietà
Proprio come le proprietà dell’istanza Le proprietà del tipo vengono interrogate e impostate con ‘.’Sintassi solo sul tipo da solo invece di puntare all’istanza.
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)
Quando eseguiamo il programma sopra usando playground, otteniamo il seguente risultato −