Шаблон наблюдателя в Swift
Я хочу реализовать шаблон наблюдателя, но я не нахожу подходящих конструкций языка программирования в Swift (также 2.0). Основными проблемами являются:
protocol
а такжеextension
не разрешает сохраненные свойства.В классах мы можем добавить сохраненные свойства, но мы не можем заставить подкласс переопределить некоторые из его унаследованных методов.Это то, что я хочу:
{class|protocol|extension|whathaveyou} Sensor {
var observers = Array<Any>() // This is not possible in protocol and extensions
// The following is does not work in classes
func switchOn()
func switchOff()
var isRunning : Bool {
get
}
}
class LightSensor : Sensor {
//...
override func switchOn() {
// turn the sensor on
}
}
// In the class C, implementing the protocol 'ObserverProtocol'
var lightSensor = LightSensor()
lightSensor.switchOn()
lightSensor.registerObserver(self) // This is what I want
И вот, что возможно, насколько мне известно:
class Sensor {
private var observers = Array<Observer>()
func registerObserver(observer:ObserverDelegate) {
observers.append(observer)
}
}
protocol SensorProtocol {
func switchOn()
func switchOff()
var isRunning : Bool {
get
}
}
class LightSensor : Sensor, SensorProtocol {
func switchOn() {
//
}
func switchOff() {
//
}
var isRunning : Bool {
get {
return // whatever
}
}
}
Но это не очень удобно, потому что обаSensor
а такжеSensorProtocol
должны идти рука об руку, и оба требования подклассLightSensor
должен выполнить.
Есть идеи?