Quelle est la bonne façon de remplacer une propriété dans une sous-classe dans Swift?
J'ai aussi tombé sur cette question, toutefois, il n'y a pas de réponse définitive
"L'usage ambigu de 'propertyName'" erreur donné substituée à la propriété avec didSet observateur
Problème: je voudrais remplacer une propriété dans une sous-classe.
Permettez-moi d'illustrer le problème avec un exemple:
J'ai une classe appelée A
et une sous-classe de celle-ci appelée B
.
Classe A
class A {
var someStoredProperty : Int?
}
Classe B
class B : A{
override var someStoredProperty : Int?{
willSet{
//add to superclass's setter
someStoredProperty = newValue! + 10
}
}
}
Dès que j'essaie de définir la propriété héritée de B
var b = B()
b.someStoredValue = 10 // Ambiguous use of someStoredProperty
le compilateur me dit
Ambiguous use of someStoredProperty
Pourquoi est-ce ?
Mise à jour
class TableViewRow{
typealias ClickAction = (tableView:UITableView, indexPath:NSIndexPath) -> Void
var clickAction : ClickAction?
}
class SwitchTableViewRow: TableViewRow {
override var clickAction : ClickAction? {
didSet{
//override setter
}
}
}
Utilisation:
var switchRow = SwitchTableViewRow()
switchRow.clickAction = {
//^
//|
//|
//ambiguous use of clickAction
[unowned self, unowned switchRow] (tableView: UITableView, indexPath: NSIndexPath) in
//do something
}
source d'informationauteur the_critic
Vous devez vous connecter pour publier un commentaire.
Je ne reçois pas une erreur dans l'article 6.1, mais le problème sous-jacent est que vous avez une boucle infinie ici. Ce que vous avez voulu dire, c'est:
Note le
super
. (Ce qui est encore une autre raison pour laquelle je vous recommandons vivement d'utiliserself.
sur propriétés, à préciser lors de ces boucles infinies existent.)Mais ce code est dénuée de sens. Avant de setter, vous définissez la valeur de
x + 10
. Vous définissez la valeur àx
. Ce que vous avez vraiment voulu dire est: