也因此我們在 observe 一個 keypath 時,不用怕打錯字,他會在 compile 時就幫我們檢查了。我們來看一下新的 KVO API 提供了我們什麼新奇的事物可以玩,先看看以下這段 code:
可以看到設定好 KVO 後我們就可以像以前在 Objc 一樣 observe 某個 keypath 的值了。注意看一下 options 的地方我們給了 .inital 跟 .old 兩個 options,這邊的意思是,我要 observe mia 的一開始的值,跟 age 變化前的值。所以在這個 observation 被建立時,KVO 就會先被觸發一次。接著每當 mia 的 age 要變化前,KVO 會通知我們,mia 的 age 即將發生變化,我們可以在他的值要被改變前,做出相對應的事。
KVO options(NSKeyValueObservingOptions) 一共有四種:
new, old, initial, prior
- 如果你需要 observe 初始值(initial)可以在 options 中加上 .initial,KVO 觸發時你會拿到 newValue,初始值在此會跟 newValue 一樣,且 isPrior 是 false
- 值在變化前,KVO 會給你變化前的值(oldValue),且 isPrior 是 true
- 值在變化後,KVO 會給你變化前後的值(old+new Value),isPrior 是 false
由此可見 isPrior 可以用來判斷此 notification 為變化前後的基準。