Avec Swift 4.2, j'ai commencé à voir beaucoup de problèmes, et l'un d'eux, je ne sais pas trop comment le résoudre, car ma méthode de lecture devrait renvoyer la valeur elle-même.
J'imagine que ce qui se passe, c'est que le getter va tenter d'accéder au getter lorsqu'il appelle self.type
Comment puis-je résoudre ce problème?
Voici une capture d'écran du code avec l'erreur.
Merci d'avance
Voici le code écrit
@objc var type: DecisionType {
set {
if(newValue == DecisionType.DecisionDouble){
//Yes button and NO button should be showing
okButton.isHidden = true;
yesButton.isHidden = false;
noButton.isHidden = false;
}
else {
//Only Ok button should be showing
okButton.isHidden = false;
yesButton.isHidden = true;
noButton.isHidden = true;
}
}
get {
return self.type;
}
};
Votre problème est qu’il n’ya pas de propriété stockée type
à renvoyer par le getter. type
est une propriété calculée. Lorsque vous essayez de lire sa valeur, il appelle le getter que vous avez défini. Ce getter appelle le getter, qui à son tour appelle le getter qui appelle le getter ... et ainsi de suite. Vous avez une récursion infinie.
Très probablement, ce que vous vouliez faire, c'est avoir une propriété stockée, qui a juste un comportement sophistiqué à chaque fois qu'elle est définie. Plutôt que d'utiliser une propriété calculée avec un get
et set
personnalisés, utilisez une propriété stockée avec un bloc willSet
ou didSet
:
@objc var type: DecisionType {
didSet {
let isDecisionDouble = newValue == DecisionType.DecisionDouble
okButton.isHidden = isDecisionDouble;
yesButton.isHidden = !isDecisionDouble;
noButton.isHidden = !isDecisionDouble;
}
}