觀察

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