A Protocol-Oriented NotificationCenter which is type safe, thread safe and with memory safety.
-
Type Safe
No more
userInfodictionary and Downcasting, just deliver the concrete type value to the observer. -
Thread Safe
You can
register,notify,unregisterin any thread without crash and data corruption. -
Memory Safety
SwiftNotificationCenterstore the observer as a zeroing-weak reference. No crash and no need tounregistermanually.
It's simple, safe, lightweight and easy to use for one-to-many communication.
Usage
Define protocol and observer:
protocol Update { func updateTitle(title: String) } extension ViewController: Update { func updateTitle(title: String) { self.titleLabel.text = title } } let vc = ViewController()
Register:
Broadcaster.register(Update.self, observer: vc)
Broadcast:
Broadcaster.notify(Update.self) { $0.updateTitle("new title") }
Unregister:
Broadcaster.unregister(Update.self, observer: self)
Compare with NSNotificationCenter :
For example, handle UIKeyboardWillShowNotification
@objc func handleKeyboardNotification(notification: NSNotification) { guard notification.name == NSNotification.Name.UIKeyboardWillShow else { return } guard let beginFrame = (notification .userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue else { return } guard let endFrame = (notification .userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return } // use beginFrame, endFrame }
SwiftNotificationCenter way:
/* If you want to observe the system built in notifications like this. You can declare a protocol and the relevant method, and use a singleton as a mediator to observe system's notification, then notify our observers. Please check the refactor example in SwiftNotificationCenterExample Project. */ func UIKeyboardWillShow(beginFrame: CGRect, endFrame: CGRect) { }
Installation
CocoaPods:
pod 'SwiftNotificationCenter'
Carthage:
github "100mango/SwiftNotificationCenter"
Manually:
Just copy source files in the SwiftNotificationCenter folder into your project.
License
SwiftNotificationCenter is under the MIT license.
