У меня есть три суперкласса с двумя подклассами следующим образом:
class BaseLookupViewController {
}
class RetrieveCompletedordersViewController: BaseLookupViewController {
}
class LoginViewController: BaseLookupViewController {
}
В BaseLookupViewController у меня есть свойство "deviceOnline":
internal var deviceConnected = true
Это устанавливается с помощью наблюдателя из другого класса:
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
}
}
Когда установлено логическое значение, мне нужно вызвать определенные методы в каждом из подклассов. Например, в RetrieveCompletedordersViewController мне нужно запустить следующее:
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
}
И аналогичный метод, но, очевидно, для другого свойства в другом подклассе. Я действительно хочу избежать добавления наблюдателя свойств к каждому из подклассов, поскольку это кажется ненужным. Кажется, что самый чистый способ - каким-то образом установить свойства подклассов в методе willSet для 'deviceConnected', но поскольку эти классы не являются синглтонами BaseLookupViewController. Каков самый чистый способ добиться этого без повторяющегося кода?