Питання
Документи Apple вказують, що:
willSet та didSet спостерігачі не викликаються, коли властивість вперше ініціалізується. Вони викликаються лише тоді, коли значення властивості встановлено поза контекстом ініціалізації.
Чи можна змусити їх викликати під час ініціалізації?
Чому?
Скажімо, у мене цей клас
class SomeClass {
var someProperty: AnyObject {
didSet {
doStuff()
}
}
init(someProperty: AnyObject) {
self.someProperty = someProperty
doStuff()
}
func doStuff() {
// do stuff now that someProperty is set
}
}
Я створив метод doStuff
, щоб зробити виклики обробки більш стислими, але я краще просто обробити властивість у межах didSet
функції. Чи є спосіб змусити це викликати під час ініціалізації?
Оновлення
Я вирішив просто видалити інструмент зручності для мого класу і змусити вас встановити властивість після ініціалізації. Це дозволяє мені знати didSet
, що завжди буде називатися. Я не вирішив, чи краще це в цілому, але це добре відповідає моїй ситуації.
defer
:convenience init(someProperty: AnyObject) { self.init() defer { self.someProperty = someProperty }