Search code examples
iosswiftnsnotificationcenter

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];

Solution

  • It's the same as the Objective-C API, but uses Swift's syntax.

    Swift 4.2 & Swift 5:

    NotificationCenter.default.addObserver(
        self,
        selector: #selector(self.batteryLevelChanged),
        name: UIDevice.batteryLevelDidChangeNotification,
        object: nil)
    

    If your observer does not inherit from an Objective-C object, you must prefix your method with @objc in order to use it as a selector.

    @objc private func batteryLevelChanged(notification: NSNotification){     
        //do stuff using the userInfo property of the notification object
    }
    

    See NSNotificationCenter Class Reference, Interacting with Objective-C APIs