观察
观察者模式是一个对象,称为主体,维护其依赖者列表,称为观察者,并通常通过调用其中一种方法自动通知它们任何状态变化。它主要用于实现分布式事件处理系统。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
}