Swift propriété remplacent pas le travail
Quand j'ai essayer de remplacer une propriété, je reçois un message d'erreur "ne peut pas remplacer la mutable propriété avec la propriété en lecture seule"
Je fournis get et set dans la super-classe.
class Card {
var contents:String {
get {
return self.contents
}
set {
self.contents = newValue
}
}
init() {
self.contents = ""
}
}
Voici mon sous-classe où je suis en train de remplacer le "contenu" de la propriété.
class PlayingCard: Card {
override var contents:String { //<-- this is where I get the build error
get {
var rankStrings:Array<String> = PlayingCard.rankStrings()
return rankStrings[Int(self.rank)] + self.suit
}
}
}
Exactement ce que je fais mal?
OriginalL'auteur DerrickHo328 | 2014-09-30
Vous devez vous connecter pour publier un commentaire.
Si la propriété que vous êtes primordial a la fois un getter et un setter, vous devez fournir à la fois dans votre sous-classe. Voici la la partie pertinente de la Swift guide de langue (l'emphase est mienne):
Si vous ne faites pas quelque chose de spécial avec la valeur, alors vous aurez généralement envie de passer à la valeur définie à la classe de base:
Vous pourriez tout aussi bien de jeter la valeur avec un vide setter (bien que je ne peux pas penser à une bonne raison pour ce faire main gauche):
Je voulais aussi faire remarquer que vous avez une boucle infinie dans le
contents
propriété dans votreCard
classe. Lorsque vous vous faites cela:Vous êtes en fait juste appel à ce même getter, la création d'une boucle infinie; vous êtes en train de faire la même chose avec le setter. Swift ne crée pas d'ivars pour votre automatiquement des propriétés comme Objective-C fait, donc vous avez besoin pour créer vous-même. De plus approprié pour créer cette propriété serait de faire quelque chose comme ceci:
Cependant, puisque vous ne faites rien d'autre que de fixer et de retour
_contents
dans votre setter et getter, vous pouvez simplifier:Remarque:
contents
peut aussi être un bon candidat pour l'utilisation d'une option (String?
) et la valeurnil
plutôt que de l'initialisation d'une chaîne vide.OriginalL'auteur Mike S
Le compilateur message d'erreur est assez simple:
Card
'scontents
propriété est mutable, qui est de dire qu'il a uneset
méthode en plus de laget
méthode.Votre remplacement ajoute une
get
méthode, vous devez ajouter unset
méthode de trop.Je pense que c'est ce que vous voulez:
newValue
est la valeur par défaut, à droite? De sorte que vous pouvez simplement utiliserset {
, je penseOriginalL'auteur Dai