Ans : Apple has provided an Observer Pattern in the Cocoa library called the NSNotificationCenter.
The basic idea is that a listener registers with a broadcaster using some predefined protocol. At some later point, the broadcaster is told to notify all of its listeners, where it calls some function on each of its listeners and passes certain arguments along. This allows for asynchronous message passing between two different objects that don't have to know about one-another, they just have to know about the broadcaster.
NSNotification is like notifying the other class about the changes that will happen if some action takes place in another class.
Simple :
NSNotificationCenter can be thought of as a broadcaster and we can tune into different stations, or channels to listen for any changes.
Example :
NotificationCenter.default is where all notifications are posted to and are observed from. Each notification must have a unique way to identify themselves. If we were to observe, or listen, to any channel, we would call on the observe method available to us through NotificationCenter.default and perform some type of action based on this listening.
We have two view controllers named VC1 and VC2. We having observer in VC1 and when we select something in VC2, VC2 post notifications to observer methods.
VC1 :
func setToIndia(notification: NSNotification) {
cityChosenLabel.text = "India"
}
func setToPakistan(notfication: NSNotification) {
cityChosenLabel.text = "Pakistan"
}
Now, we create notification.name extension to set unique name to notification.
extension Notification.Name {
static let india = Notification.Name("India")
static let pakistan = Notification.Name("Pakistan")
}
Now we add observer methods,
NotificationCenter.default.addObserver(self, selector: #selector(setToIndia(notification:)), name: .india, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(setToPakistan(notfication:)), name: .pakistan, object: nil)
VC2:
We will post notification on selecting something here :
@IBAction func indiaButton(_ sender: Any) {
NotificationCenter.default.post(name: .india, object: nil)
}
@IBAction func pakistanButton(_ sender: Any) {
NotificationCenter.default.post(name: .pakistan, object: nil
}
* When indaButton clicked, Notification Center broadcast notification with message to all listeners name India.
If you didn't understand still, consider notification center is radio station and our mobile device has observer methods so it can listen radio station's voice.
Simple.....Huah.....