-
Notifications
You must be signed in to change notification settings - Fork 0
/
SimpleEventHandler.swift
39 lines (31 loc) · 1.04 KB
/
SimpleEventHandler.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import Foundation
typealias CallbackEvent = (([String: Any]) -> ())
// This is a simple event handler that dispatches events to subscribed callbacks
// it could ie be extended to feed state machines if one wanted.
class SimpleEventHandler {
enum Event {
case userInput
case eventX
case eventY
case eventZ
}
static var defaultHandler = SimpleEventHandler()
var eventHooks: [Event: [String: CallbackEvent]] = [:]
func add(id: String, forEvent event: Event, callback: @escaping CallbackEvent) {
if let _ = eventHooks[event] {
eventHooks[event]?[id] = callback
} else {
eventHooks[event] = [id: callback]
}
}
func remove(id: String, forEvent event: Event) {
_ = eventHooks[event]?.removeValue(forKey: id)
}
func handle(event: Event, eventData: [String: Any]) {
if let callbacks = eventHooks[event] {
for callback in callbacks {
callback.value(eventData)
}
}
}
}