Skip to content

Instantly share code, notes, and snippets.

@zhjuncai
Forked from chriseidhof/TypedNotifications.swift
Last active August 29, 2015 14:16
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 zhjuncai/3e541cde23e5d4d9b153 to your computer and use it in GitHub Desktop.
Save zhjuncai/3e541cde23e5d4d9b153 to your computer and use it in GitHub Desktop.
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)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment