У меня есть два класса, которые идеально бы иметь код в их inits
и deinits
, например:Быстрая передовая практика для умножения наследования и деидов?
class Tappable {
init() { Registry.register(tappable: self) }
deinit { Registry.deregister(tappable: self) }
}
class Resizable {
init() { Registry.register(resizable: self) }
deinit { Registry.deregister(resizable: self) }
}
В идеале я бы унаследовать от обоих, например:
class UIElement: Tappable, Resizable {}
Но, конечно, я не могу в Swift. Мое текущее решение является сделать один протокол и положить записку, чтобы напомнить мне, чтобы написать init
и deinit
с вызовами в Registry
, например .:
//: Classes that implememt `Resizable` must call `Registry.register(resizable: self)` in all `init`s and have `deinit { Registry.deregister(resizable: self) }`.
protocol Resizable {}
class UIElement: Tappable, Resizable {
override init() {
super.init()
Registry.register(resizable: self)
}
deinit { Registry.deregister(resizable: self) }
}
Есть ли лучший способ?
Благодарим за предложение, это, безусловно, хорошее напоминание. Я буду использовать эту идею, когда смогу, но я не всегда хочу иметь init с точной подписью. Хорошим побочным эффектом этой идеи является то, что она заставляет инъекцию зависимостей, которые иногда я также хочу. Еще раз спасибо. –