Saya memiliki tiga superclass dengan 2 subclass sebagai berikut:
class BaseLookupViewController {
}
class RetrieveCompletedordersViewController: BaseLookupViewController {
}
class LoginViewController: BaseLookupViewController {
}
Di BaseLookupViewController saya memiliki properti 'deviceOnline':
internal var deviceConnected = true
Ini diatur menggunakan pengamat dari kelas yang berbeda:
override public func viewDidLoad() {
super.viewDidLoad()
stackView.customPadding(Constants.stackViewPadding, after: submitButton)
addConectivityObserver()
}
// MARK: - Configuration
private func addConectivityObserver() {
NotificationCenter.default.addObserver(self, selector: #selector(connectivityChanged(notification:)), name: .connectivityStatusChanged, object: nil)
}
@objc private func connectivityChanged(notification: Notification) {
if notification.object as? ConnectionService.ConnectionStatus == .connected {
deviceConnected = true
} else {
deviceConnected = false
}
}
Ketika bool disetel, saya perlu memicu metode tertentu di setiap subkelas. Misalnya, di RetrieveCompletedordersViewController saya perlu memicu yang berikut ini:
if deviceConnected {
self.tabBarItem.image = #imageLiteral(resourceName: "retrieve_completed")
self.errorLabel?.isHidden = true
} else {
self.tabBarItem.image = #imageLiteral(resourceName: "retrieve_offline")
self.errorLabel?.isHidden = false
}
Dan metode serupa tetapi jelas pada properti berbeda di subkelas lain. Saya benar-benar ingin menghindari menambahkan pengamat properti ke setiap subkelas karena tampaknya tidak diperlukan. Cara paling bersih tampaknya adalah dengan mengatur properti subkelas dalam metode willSet 'deviceConnected' tetapi karena kelas-kelas ini bukan BaseLookupViewController yang lajang. Apa cara terbersih untuk mencapai hal ini tanpa kode berulang?