protocol GameListener {
func gameStarted(_ name: String)
}
class Game {
fileprivate var listeners: [GameListener] = []
func addListener(_ listener: GameListener) {
listeners.append(listener)
}
var name: String
func start() {
for listener in listeners {
listener.gameStarted(name)
}
}
init (name: String) {
self.name = name
}
}
class Statistic: GameListener {
var startsCount: Int = 0
var lastGame: String = ""
func gameStarted(_ name: String) {
startsCount += 1
lastGame = name
}
}
let statistic = Statistic()
let heroes = Game(name: "Heroes")
let doom = Game(name: "Doom")
//subscribe to events
heroes.addListener(statistic)
doom.addListener(statistic)
doom.start()
heroes.start()
//statistic.lastGame is "Heroes"
//statistic.startsCount is 2
print("lastGame is \(statistic.lastGame)")
print("startsCount is \(statistic.startsCount)")