Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSNotificationCenter addObserver in Swift

How do you add an observer in Swift to the default notification center? I'm trying to port this line of code that sends a notification when the battery level changes.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(batteryLevelChanged:) name:UIDeviceBatteryLevelDidChangeNotification object:nil]; 
like image 353
Berry Blue Avatar asked Jun 04 '14 23:06

Berry Blue


People also ask

What is Nsnotificationcenter in Swift?

A notification dispatch mechanism that enables the broadcast of information to registered observers. iOS 2.0+ iPadOS 2.0+ macOS 10.0+ Mac Catalyst 13.0+ tvOS 9.0+ watchOS 2.0+

What is addObserver in Swift?

addObserver(_:selector:name:object:)Adds an entry to the notification center to call the provided selector with the notification. iOS 2.0+ iPadOS 2.0+ macOS 10.0+ Mac Catalyst 13.0+ tvOS 9.0+ watchOS 2.0+

What is NotificationCenter default post?

default — This is the notification variable you can create it globally inside your class if you having more notifications. addObserver(self, — This is for the class where we are going to observer notification.


1 Answers

Swift 4.0 & Xcode 9.0+:

Send(Post) Notification:

NotificationCenter.default.post(name: Notification.Name("NotificationIdentifier"), object: nil) 

OR

NotificationCenter.default.post(name: Notification.Name("NotificationIdentifier"), object: nil, userInfo: ["Renish":"Dadhaniya"]) 

Receive(Get) Notification:

NotificationCenter.default.addObserver(self, selector: #selector(self.methodOfReceivedNotification(notification:)), name: Notification.Name("NotificationIdentifier"), object: nil) 

Function-Method handler for received Notification:

@objc func methodOfReceivedNotification(notification: Notification) {} 

Swift 3.0 & Xcode 8.0+:

Send(Post) Notification:

NotificationCenter.default.post(name: Notification.Name("NotificationIdentifier"), object: nil) 

Receive(Get) Notification:

NotificationCenter.default.addObserver(self, selector: #selector(YourClassName.methodOfReceivedNotification(notification:)), name: Notification.Name("NotificationIdentifier"), object: nil) 

Method handler for received Notification:

func methodOfReceivedNotification(notification: Notification) {   // Take Action on Notification } 

Remove Notification:

deinit {   NotificationCenter.default.removeObserver(self, name: Notification.Name("NotificationIdentifier"), object: nil) } 

Swift 2.3 & Xcode 7:

Send(Post) Notification

NSNotificationCenter.defaultCenter().postNotificationName("NotificationIdentifier", object: nil) 

Receive(Get) Notification

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(YourClassName.methodOfReceivedNotification(_:)), name:"NotificationIdentifier", object: nil) 

Method handler for received Notification

func methodOfReceivedNotification(notification: NSNotification){   // Take Action on Notification } 


For historic Xcode versions...



Send(Post) Notification

NSNotificationCenter.defaultCenter().postNotificationName("NotificationIdentifier", object: nil) 

Receive(Get) Notification

NSNotificationCenter.defaultCenter().addObserver(self, selector: "methodOfReceivedNotification:", name:"NotificationIdentifier", object: nil) 

Remove Notification

NSNotificationCenter.defaultCenter().removeObserver(self, name: "NotificationIdentifier", object: nil) NSNotificationCenter.defaultCenter().removeObserver(self) // Remove from all notifications being observed 

Method handler for received Notification

func methodOfReceivedNotification(notification: NSNotification) {   // Take Action on Notification } 

Annotate either the class or the target method with @objc

@objc private func methodOfReceivedNotification(notification: NSNotification) {   // Take Action on Notification }  // Or  dynamic private func methodOfReceivedNotification(notification: NSNotification) {   // Take Action on Notification } 
like image 189
Renish Dadhaniya Avatar answered Oct 02 '22 01:10

Renish Dadhaniya