[Résolu] Setter overridé qui appelle le setter sur la super classe...
Pyroh
Membre
Je me heurte à un soucis un peu bizarre. ça se passe en Swift 3 avec une classe de cette sorte :
class RulesTableItem: NSObject {
let id: String
let url: URL
let icon: NSImage
let name: String
var behavior: Int {
didSet {
let info = StatusMenuController.behaviorDidChangeUserInfoConstructor(id: id, url: url, behavior: AppBehavior(rawValue: behavior + 1)!)
let not = Notification(name: Notification.Name.BehaviorDidChangeForApp, object: self, userInfo: info)
NotificationCenter.default.post(not)
}
}
init(id: String, url: URL, icon: NSImage, name: String, behavior: Int) {
self.id = id
self.url = url
self.icon = icon
self.name = name
self.behavior = behavior
}
}
Rien de bien sorcier. J'ai besoin d'enlever ce +1 que j'ajoute à behavior mais tout en gardant le reste. Alors je me suis dit que j'allais faire ce genre de chose :
class RunningAppTableItem: RulesTableItem {
override var behavior: Int {
didSet {
let info = StatusMenuController.behaviorDidChangeUserInfoConstructor(id: id, url: url, behavior: AppBehavior(rawValue: behavior)!)
let not = Notification(name: Notification.Name.BehaviorDidChangeForApp, object: self, userInfo: info)
NotificationCenter.default.post(not)
}
}
}
Dans ce que je comprends et de ce que je connais du paradigme objet, à partir du moment ou j'override quelque chose je dois explicitement faire un appel à la super classe si je veux utiliser son implémentation.
Ben là non :
6 Fluor 0x0000000100005060 RulesTableItem.behavior.didset + 254
7 Fluor 0x0000000100005030 RulesTableItem.behavior.setter + 36
8 Fluor 0x0000000100005d50 RunningAppTableItem.behavior.setter + 93
9 Fluor 0x0000000100005d10 @objc RunningAppTableItem.behavior.setter + 42
J'ai quand même cherché et je me suis rendu compte que sur SO plein de gens ont le même soucis. On va dire que c'est "normal"....
Je laisse quand meme le post si jamais quelqu'un cherche.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Voilà la solution que j'ai trouveÌ sur SO :