How to pass data using NotificationCenter in swift 3.0 and NSNotificationCenter in swift 2.0? How to pass data using NotificationCenter in swift 3.0 and NSNotificationCenter in swift 2.0? ios ios

How to pass data using NotificationCenter in swift 3.0 and NSNotificationCenter in swift 2.0?


Swift 2.0

Pass info using userInfo which is a optional Dictionary of type [NSObject : AnyObject]?

  let imageDataDict:[String: UIImage] = ["image": image]  // Post a notification  NSNotificationCenter.defaultCenter().postNotificationName(notificationName, object: nil, userInfo: imageDataDict) // Register to receive notification in your class NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.showSpinningWheel(_:)), name: notificationName, object: nil) // handle notification func showSpinningWheel(notification: NSNotification) {   if let image = notification.userInfo?["image"] as? UIImage {  // do something with your image     } }

Swift 3.0, 4.0, 5.0 version and above

The userInfo now takes [AnyHashable: Any]? as an argument, which we provide as a dictionary literal in Swift

  let imageDataDict:[String: UIImage] = ["image": image]  // post a notification  NotificationCenter.default.post(name: NSNotification.Name(rawValue: "notificationName"), object: nil, userInfo: imageDataDict)   // `default` is now a property, not a method call // Register to receive notification in your class NotificationCenter.default.addObserver(self, selector: #selector(self.showSpinningWheel(_:)), name: NSNotification.Name(rawValue: "notificationName"), object: nil) // handle notification // For swift 4.0 and above put @objc attribute in front of function Definition   func showSpinningWheel(_ notification: NSNotification) {  if let image = notification.userInfo?["image"] as? UIImage {  // do something with your image     } }

NOTE: Notification “names” are no longer strings, but are of type Notification.Name, hence why we are using NSNotification.Name(rawValue: "notificationName") and we can extend Notification.Name with our own custom notifications.

extension Notification.Name {static let myNotification = Notification.Name("myNotification")}// and post notification like thisNotificationCenter.default.post(name: .myNotification, object: nil)


For Swift 3

let imageDataDict:[String: UIImage] = ["image": image]  // post a notification  NotificationCenter.default.post(name: NSNotification.Name(rawValue: "notificationName"), object: nil, userInfo: imageDataDict)   // `default` is now a property, not a method call // Register to receive notification in your class NotificationCenter.default.addObserver(self, selector: #selector(self.showSpinningWheel(_:)), name: NSNotification.Name(rawValue: "notificationName"), object: nil) // handle notification func showSpinningWheel(_ notification: NSNotification) {        print(notification.userInfo ?? "")        if let dict = notification.userInfo as NSDictionary? {            if let id = dict["image"] as? UIImage{                // do something with your image            }        } }

For Swift 4

let imageDataDict:[String: UIImage] = ["image": image]  // post a notification  NotificationCenter.default.post(name: NSNotification.Name(rawValue: "notificationName"), object: nil, userInfo: imageDataDict)   // `default` is now a property, not a method call // Register to receive notification in your class NotificationCenter.default.addObserver(self, selector: #selector(self.showSpinningWheel(_:)), name: NSNotification.Name(rawValue: "notificationName"), object: nil) // handle notification @objc func showSpinningWheel(_ notification: NSNotification) {        print(notification.userInfo ?? "")        if let dict = notification.userInfo as NSDictionary? {            if let id = dict["image"] as? UIImage{                // do something with your image            }        } }


Hello @sahil I update your answer for swift 3

let imageDataDict:[String: UIImage] = ["image": image]  // post a notification  NotificationCenter.default.post(name: NSNotification.Name(rawValue: "notificationName"), object: nil, userInfo: imageDataDict)   // `default` is now a property, not a method call // Register to receive notification in your class NotificationCenter.default.addObserver(self, selector: #selector(self.showSpinningWheel(_:)), name: NSNotification.Name(rawValue: "notificationName"), object: nil) // handle notification func showSpinningWheel(_ notification: NSNotification) {        print(notification.userInfo ?? "")        if let dict = notification.userInfo as NSDictionary? {            if let id = dict["image"] as? UIImage{                // do something with your image            }        } }

Hope it's helpful. Thanks