收藏    我在用   0 人在用
 -  null

A Protocol-Oriented NotificationCenter which is type safe, thread safe and with memory safety

 GitHub     下载     同步

7    530    35    almost 2 years前

<p align="center"> <img src="logo.png" />

A Protocol-Oriented NotificationCenter which is type safe, thread safe and with memory safety.

  • Type Safe

    No more userInfo dictionary and Downcasting, just deliver the concrete type value to the observer.

  • Thread Safe

    You can register, notify, unregister in any thread without crash and data corruption.

  • Memory Safety

    SwiftNotificationCenter store the observer as a zeroing-weak reference. No crash and no need to unregister manually.

It's simple, safe, lightweight and easy to use for one-to-many communication.


Define protocol and observer:

protocol Update {
    func updateTitle(title: String)

extension ViewController: Update {
  func updateTitle(title: String) {
        self.titleLabel.text = title
let vc = ViewController()


Broadcaster.register(Update.self, observer: vc)


Broadcaster.notify(Update.self) {
    $0.updateTitle("new title")


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) {



pod 'SwiftNotificationCenter'


github "100mango/SwiftNotificationCenter"


Just copy source files in the SwiftNotificationCenter folder into your project.


SwiftNotificationCenter is under the MIT license.

No Reply at the moment.
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up