Pour autant que je sache, Swift nous permet de définir des observateurs de propriétés pour les propriétés stockées et calculées. Mais si la valeur de la propriété calculée dépend d'un magasin de soutien, les observateurs de propriété ne sont pas déclenchés lorsque ces valeurs de magasin de support sont changées:Swift: les observateurs de propriétés pour les propriétés calculées
public class BaseClass {
private var privateVar1: Int = 0
private var privateVar2: Int = 0
public var property: Int {
get {
return privateVar1 * privateVar2
}
set {
print("some setter without effect")
}
}
private func changeSomeValues() {
privateVar1 = 1
privateVar2 = 2
}
}
public class SubClass : BaseClass {
override var property: Int {
didSet {
print("didSet \(property)")
}
}
}
didSet de SubClass n'est pas appelée lorsque changeSomeValues est appelé.
Considérons un cas: nous avons une telle BaseClass dans une structure tierce. Nous définissons SubClass dans notre application. La question est: comment pouvons-nous compter sur des observateurs SubClass sans connaissance de la nature de la propriété: est-elle stockée (et nous pouvons compter sur des observateurs) ou calculée (et nous ne pouvons pas attendre des observateurs de tir chaque fois que nous l'attendons)? C'est possible? Si non, est-ce une violation d'incapsulation?
Votre code n'est pas valide et ne compile pas. 'property' est en lecture seule. Si 'property' est une propriété calculée en lecture-écriture, alors' didSet' se déclenchera sur la sous-classe, comme prévu. – Darren