Skip to content

Instantly share code, notes, and snippets.

@aleclarson
Created October 22, 2014 12:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aleclarson/620e8ce5eee0004d968b to your computer and use it in GitHub Desktop.
Save aleclarson/620e8ce5eee0004d968b to your computer and use it in GitHub Desktop.
ListenerSet
import Foundation
public func += (set: ListenerSet, listener: Listener) {
set.list += listener
}
// An unordered set of Listeners.
public class ListenerSet {
public subscript (key: String) -> Listener! {
get { return hash[key] }
set { hash[key] = newValue }
}
public func each (handler: Listener -> Void) {
for listener in list { handler(listener) }
for (_, listener) in hash { handler(listener) }
}
public func filter (target: AnyObject!) -> [Listener] {
var listeners = [Listener]()
each {
if $0.targetID == getTargetID(target) {
listeners.append($0)
}
}
return listeners
}
public func filter (emitter: Emitter) -> [Listener] {
var listeners = [Listener]()
each {
if let listener = $0 as? EmitterListener {
if listener.emitter === emitter {
listeners.append($0)
}
}
}
return listeners
}
public func filter (target: NSObject, _ keyPath: String! = nil) -> [Listener] {
var listeners = [Listener]()
each {
if let listener = $0 as? ChangeListener<Any> {
if listener.targetID == getTargetID(target) {
if keyPath == nil || listener.keyPath == keyPath {
listeners.append(listener)
}
}
}
}
return listeners
}
lazy var hash = [String:Listener]()
lazy var list = [Listener]()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment