观察

观察者模式是一个对象,称为主体,维护其依赖者列表,称为观察者,并通常通过调用其中一种方法自动通知它们任何状态变化。它主要用于实现分布式事件处理系统。Observer 模式也是熟悉的模型 - 视图 - 控制器(MVC)架构模式中的关键部分。维基百科参考

基本上,当你有一个可以通知观察者某些行为或状态变化的对象时,就会使用观察者模式。

首先,我们为 Notification Center 创建一个全局引用(在类之外):

let notifCentre = NotificationCenter.default

太好了,我们可以随时随地调用。然后我们想要将一个类注册为观察者…

notifCentre.addObserver(self, selector: #selector(self.myFunc), name: "myNotification", object: nil)

这会将类添加为 readForMyFunc 的观察者。它还指示在收到通知时应调用 myFunc 函数。这个函数应该写在同一个类中:

func myFunc(){
    print("The notification has been received")
}

此模式的一个优点是你可以添加许多类作为观察者,从而在一次通知后执行许多操作。

现在可以从代码中的几乎任何位置简单地发送(或者如果你愿意发布)通知:

notifCentre.post(name: "myNotification", object: nil)

你还可以将通知信息作为字典传递

let myInfo = "pass this on"
notifCentre.post(name: "myNotification", object: ["moreInfo":myInfo])

但是,你需要向你的函数添加通知:

func myFunc(_ notification: Notification){
    let userInfo = (notification as NSNotification).userInfo as! [String: AnyObject]
    let passedInfo = userInfo["moreInfo"]
    print("The notification \(moreInfo) has been received")
    //prints - The notification pass this on has been received
}