Nie robią prawie to samo, wręcz przeciwnie mają zupełnie inne cele. Modele get
i set
są używane w obliczeniach właściwości. Na przykład weź przykładową strukturę, która nie ma żadnego rzeczywistego zastosowania, ale jest dobrym demo.
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
Więc, jak widać, zmienna number
nie jest zmienna w tradycyjnym sensie, że jest to nieruchomość komputerowej. Tak więc, gdy zadzwonię pod numer s.number
, otrzymam iloczyn x i y. Ponadto użyłbyś zestawu do zmiany innych zmiennych (nie samej własności obliczeniowej) w strukturze. Tak więc ustawiłem x
i y
na różne wartości w oparciu o newValue
. Ten pomysł wyliczonej właściwości może być używany zamiast funkcji i uważam, że jest bardzo przydatny w upraszczaniu pobierania danych z funkcji. Na przykład, możesz mieć strukturę, która ma dystans w kilometrach i możesz chcieć tego w milach bardzo często. Możesz więc utworzyć obliczoną właściwość miles
dla mil, która oblicza liczbę kilometrów metodą get
i zmienia liczbę kilometrów z ustawiaczem, jeśli ustawiłeś mile w swoim programie.
Teraz, po didSet
i willSet
. Możesz ich użyć do powiadomienia struktury o zmianie wartości. Na przykład średniTracker.
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
Wskazówki jak didSet
jest faktycznie na zmiennej, która zawiera wartość, to znaczy, że nie jest to własność komputerowej. Ponadto użyłem obliczonej właściwości average
, aby uzyskać średnią. Ogólnie rzecz biorąc, mam nadzieję, że wyjaśniłem twoje zamieszanie dotyczące tego bardzo mocnego aspektu Swift.