觀察
觀察者模式是一個物件,稱為主體,維護其依賴者列表,稱為觀察者,並通常通過呼叫其中一種方法自動通知它們任何狀態變化。它主要用於實現分散式事件處理系統。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
}