Je souhaite remplacer les propriétés de la classe suivante. Dites que j'ai une classe A
qui a une propriété booléenne r
. Pour la superclasse A
, je veux r
être réglé et obtenir normalement. Pour la sous-classe B
, je veux que r
soit toujours false
. Je ne sais pas pourquoi cela est plus difficile que ce qu'elle devrait être ...Substitution de la propriété dans Swift 3
class A {
init(r: Bool) {
self.r = r
}
var r: Bool {
willSet(n) {
r = n
}
get {
return r
}
}
}
class B: A {
override var r: Bool {
willSet(n) {
r = n
}
get {
return false
}
}
}
let a = A(r: true)
a.r = false
print(a.r) // prints 'false', which is good
let b = B(r: true)
print(b.r) // prints 'true'
b.r = false // ERROR: I can't get pass this point 'Execution was interrupted on playground
print(b.r)
Votre code ne compile pas - vous ne pouvez pas utiliser un observateur de propriété ('willSet') avec une propriété calculée. Et même si elle compilait, 'get {return r}' provoquerait une boucle récursive, et les implémentations 'willSet' ne feraient rien. Vous voulez probablement juste une propriété stockée dans la classe de base, avec un remplacement de propriété calculé dans la sous-classe. – Hamish
Pouvez-vous élaborer sur la façon d'utiliser la propriété stockée et de surcharger avec calculé dans la sous-classe? Je veux que 'r' soit toujours' false' dans la sous-classe. – 7ball
Avez-vous vérifié la question similaire dans la section "Connexes"? –