Skip to content

Instantly share code, notes, and snippets.

@jarek-foksa
Created June 22, 2014 21:11
Show Gist options
  • Save jarek-foksa/f56a2b99f6f12122e7da to your computer and use it in GitHub Desktop.
Save jarek-foksa/f56a2b99f6f12122e7da to your computer and use it in GitHub Desktop.
import Foundation
class EventEmitter {
var _events : Dictionary<String, Dictionary<Int, (event: Any)->()>?> = [:]
var _eventsCounter : Int = 0
func addEventListener(eventName: String, listener: (event: Any) -> ()) -> (Int) {
_eventsCounter += 1
var optionalListeners = _events[eventName]
if var listeners = optionalListeners? {
listeners[_eventsCounter] = listener
_events[eventName] = listeners
if listeners.count > 20 {
println("Potential EventEmitter memory leak: \(listeners.count) listeners subscribed to event \(eventName)")
}
}
else {
_events[eventName] = [_eventsCounter: listener]
}
return _eventsCounter
}
func removeEventListener(eventName: String, id: Int) {
var optionalListeners = _events[eventName]
if var listeners = optionalListeners? {
listeners.removeValueForKey(id)
_events[eventName] = listeners
}
}
func dispatchEvent(eventName:String, event: Any) {
var optionalListeners = _events[eventName]
if var listeners = optionalListeners? {
for (id, listener) in listeners {
listener(event: event)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment