Skip to content

Instantly share code, notes, and snippets.

@richimf
Created March 13, 2019 03:34
Show Gist options
  • Save richimf/0aa86cf17054aa755ea8898b3af8a6f2 to your computer and use it in GitHub Desktop.
Save richimf/0aa86cf17054aa755ea8898b3af8a6f2 to your computer and use it in GitHub Desktop.
Observer Pattern
protocol Observer {
func update()
}
class ConcreteObserver: Observer {
var id: String
init(id: String) {
self.id = id
}
func update() {
print(id + " observered the subject's state was changed.")
}
}
class TextField {
var observers: [Observer] = []
var state: String {
didSet {
notify()
}
}
init(state: String) {
self.state = state
}
func attach(observer: Observer) {
observers.append(observer)
}
func notify() {
for observer in observers {
observer.update()
}
}
}
//usage
let textField = TextField(state: "initial state")
let observerA = ConcreteObserver(id: "A")
let observerB = ConcreteObserver(id: "B")
textField.attach(observer: observerA)
textField.attach(observer: observerB)
textField.state = "new state"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment