Question
Les documents d'Apple spécifient que:
Les observateurs willSet et didSet ne sont pas appelés lors de la première initialisation d'une propriété. Ils sont uniquement appelés lorsque la valeur de la propriété est définie en dehors d'un contexte d'initialisation.
Est-il possible de forcer ces appels lors de l'initialisation?
Pourquoi?
Disons que j'ai cette classe
class SomeClass {
var someProperty: AnyObject {
didSet {
doStuff()
}
}
init(someProperty: AnyObject) {
self.someProperty = someProperty
doStuff()
}
func doStuff() {
// do stuff now that someProperty is set
}
}
J'ai créé la méthode doStuff
pour rendre les appels de traitement plus concis, mais je préfère simplement traiter la propriété dans la didSet
fonction. Existe-t-il un moyen de forcer cet appel lors de l'initialisation?
Mettre à jour
J'ai décidé de supprimer l'intialiseur de commodité pour ma classe et de vous forcer à définir la propriété après l'initialisation. Cela me permet de savoir didSet
sera toujours appelé. Je n'ai pas décidé si c'est mieux dans l'ensemble, mais cela convient bien à ma situation.
defer
:convenience init(someProperty: AnyObject) { self.init() defer { self.someProperty = someProperty }