Non fanno più o meno la stessa cosa, al contrario hanno scopi completamente diversi. Il get
e il set
vengono utilizzati su proprietà calcolate. Ad esempio, prendi questa struttura di esempio che non ha reale utilità, ma è una buona dimostrazione.
struct test {
var x = 5
var y = 5
var number: Int {
get {
return x * y
}
set (newValue){
x = newValue/2
y = newValue/2
}
}
}
var s = test()
s.number //25
s.number = 100
s.x //50
s.number //2500
Quindi, come si può vedere, la variabile number
non è una variabile in senso tradizionale, si tratta di una proprietà calcolata. Quindi, quando chiamo s.number
ottengo il prodotto di xey. Inoltre, dovresti usare il set per cambiare altre variabili (non la proprietà calcolata stessa) nella struttura. Quindi, ho impostato x
e su valori diversi in base allo newValue
. Questa idea di una proprietà calcolata può essere utilizzata al posto di una funzione e trovo molto utile semplificare il recupero dei dati da una funzione. Ad esempio, potresti avere una struttura che ha una distanza in chilometri e potresti volerlo in miglia molto frequentemente. Quindi, è possibile creare una proprietà calcolata miles
per miglia che calcola il numero di chilometri con il metodo get
e cambia il numero di chilometri con il setter se si imposta miglia nel programma.
Ora, per la didSet
e willSet
. È possibile utilizzare questi per notificare la struttura di una modifica di valore. Ad esempio, un Traditore medio.
struct averageTracker {
var total: Double = 0 {
didSet {
numEntries++
}
}
var numEntries: Double = 0
var average: Double {
get {
return total/numEntries
}
}
}
var ave = averageTracker()
ave.total += 10
ave.total += 20
ave.average //15
Si noti come il didSet
è in realtà una variabile che contiene un valore, cioè, non è una proprietà calcolata. Inoltre, ho usato una proprietà calcolata average
per ottenere la media. Nel complesso, spero di aver chiarito la tua confusione riguardo a questo aspetto molto potente di Swift.
fonte
2015-10-13 01:30:38