Swift: Property Observers
Czym są Property Observers?
Swift pozwala na obserwowanie ewentualnych zmian przypisywanych do zmiennej. Dzięki property observers możesz zareagować na przypisanie wartości zmiennej tuż przed lub zaraz *po.
Możesz użyć:
- willSet — Zostanie wywołane zaraz przed przypisanie nowej wartości
- didSet — Zostanie wywołane tuż po przypisaniu wartości
Składania prezentuje się następująco:
var someProperty: Int = 0 {
willSet {
print("New value: \(newValue)")
}
didSet {
print("Old value: \(oldValue)")
}
}
Zarówno willSet jak i didSet przyjmują domyślnie parametry:
- Dla willSet jest to newValue — jest to wartość, która ma zostać przypisana do zmiennej.
- Dla didSet jest to oldValue — jest to poprzednia wartość, którą zawierała ta zmienna.
Możesz też sam określić nazwy tych parametrów:
var someProperty: Int = 0 {
willSet(valueToSet) {
print("New value: \(valueToSet)")
}
didSet(previousValue) {
print("Old value: \(previousValue)")
}
}
Przykład
struct CaloriesCounter {
var totalCalories: Int = 0 {
willSet(newTotalCalories) {
print("Total calories is \(newTotalCalories)")
}
didSet {
if totalCalories > oldValue {
print("Added \(totalCalories - oldValue) calories")
}
}
}
}
Warto wiedzieć
Jeśli oznaczysz zmienną jako property observer:
- Nie może to być stała let, tylko var.
- Musi zawierać wartość domyślną. Jeśli nie wiesz, co przypisać przypisz nil. Możesz też oznaczyć zmienną jako optional — wtedy domyślnie zostanie przypisane nil do zmiennej.
- Nie możesz użyć tego wspólnie z computed property. Ponieważ computed property nie przechowuje wartości.
- Nie musisz używać willSet i didSet razem. Jeśli potrzebujesz tylko jednej z nich, użyj tylko tej.