Pytanie
Dokumenty Apple'a określają, że:
Obserwatory willSet i didSet nie są wywoływane przy pierwszej inicjalizacji właściwości. Są wywoływane tylko wtedy, gdy wartość właściwości jest ustawiona poza kontekstem inicjalizacji.
Czy można wymusić ich wywoływanie podczas inicjalizacji?
Czemu?
Powiedzmy, że mam tę klasę
class SomeClass {
var someProperty: AnyObject {
didSet {
doStuff()
}
}
init(someProperty: AnyObject) {
self.someProperty = someProperty
doStuff()
}
func doStuff() {
// do stuff now that someProperty is set
}
}
Stworzyłem metodę doStuff
, aby wywołania przetwarzania były bardziej zwięzłe, ale wolałbym po prostu przetworzyć właściwość w ramach didSet
funkcji. Czy istnieje sposób, aby zmusić to do wywołania podczas inicjalizacji?
Aktualizacja
Postanowiłem po prostu usunąć wygodny interializer dla mojej klasy i zmusić cię do ustawienia właściwości po inicjalizacji. To pozwala mi wiedzieć, didSet
że zawsze będzie dzwonić. Nie zdecydowałem, czy jest to ogólnie lepsze, ale dobrze pasuje do mojej sytuacji.
defer
:convenience init(someProperty: AnyObject) { self.init() defer { self.someProperty = someProperty }