Я хочу реализовать шаблон наблюдателя, но я не нашел подходящих конструкторов языка программирования в Swift (также 2.0). Основные проблемы:Шаблон наблюдателя в Swift
- и
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
.
Любые идеи?
Это, вероятно, не представляется возможным, потому что вы не можете создать ВАР в расширение права? В моем случае это работает на обычном классе –
Да, но, как я писал, в классе я не могу применять метод, который требуется реализовать! –
Я обновил демо-код, чтобы уточнить, чего я хочу, а что невозможно. –