NSNotificationCenter addObserver in Swift

后端 未结 14 1997
难免孤独
难免孤独 2020-11-22 05:23

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.

14条回答
  •  情歌与酒
    2020-11-22 06:12

    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
    }
    

提交回复
热议问题