Классы

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 StatisticGameListener {
    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)")