Je convertis un projet en Swift et j'ai rencontré un problème dans un setter. Mon code Objective-C ressemblait à ceci:
- (void)setDocument:(MyDocument *)document
{
if (![_document isEqual:document]) {
_document = document;
[self useDocument];
}
}
et a permis à mon View Controller de l'exécuter à chaque fois que le document était défini (généralement dans le prepareForSegue:
méthode du View Controller présentateur).
J'ai trouvé les observateurs de propriétés willSet
et didSet
mais ils ne fonctionnent que lorsque la propriété est mise à jour, pas lorsqu'elle est initialisée et mise à jour.
Des idées? Merci
MISE À JOUR
après avoir essayé d'obtenir {} et de définir {}, j'obtiens le EXC_BAD_ACCESS
Erreur
var document: UIDocument? {
get {
return self.document!
}
set {
self.document = newValue
useDocument()
}
}
Vous ne pouvez pas utiliser set
comme ça parce que lorsque vous appelez self.document = newValue
vous appelez à nouveau le passeur; vous avez créé une boucle infinie.
À la place, vous devez créer une propriété distincte pour stocker réellement la valeur dans:
private var _document: UIDocument? = nil
var document: UIDocument? {
get {
return self._document
}
set {
self._document = newValue
useDocument()
}
}
Voici une version Swift 3
var document : UIDocument? {
didSet {
useDocument()
}
}