Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Typed Notifications
import Foundation
class Box<T> {
let unbox: T
init(_ value: T) { self.unbox = value }
}
struct Notification<A> {
let name: String
}
func postNotification<A>(note: Notification<A>, value: A) {
let userInfo = ["value": Box(value)]
NSNotificationCenter.defaultCenter().postNotificationName(note.name, object: nil, userInfo: userInfo)
}
class NotificationObserver {
let observer: NSObjectProtocol
init<A>(notification: Notification<A>, block aBlock: A -> ()) {
observer = NSNotificationCenter.defaultCenter().addObserverForName(notification.name, object: nil, queue: nil) { note in
if let value = (note.userInfo?["value"] as? Box<A>)?.unbox {
aBlock(value)
} else {
assert(false, "Couldn't understand user info")
}
}
}
deinit {
NSNotificationCenter.defaultCenter().removeObserver(observer)
}
}
@mohamede1945
Copy link

mohamede1945 commented May 18, 2015

Good one! Did you write code like this for KVO?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment