![](/img/trans.png)
[英]Initial navigation view controller of AuthUI not working under Xcode 10.2
[英]Option NSKeyValueObservingOptions.initial in block-based KVO
文檔說[使用.initial
時]:如果還指定了 new,則通知中的更改字典將始終包含一個 newKey 條目,但永遠不會包含 oldKey 條目。
在基於塊的 KVO 觀察器中,使用oldValue
接收change
結構。
oldValue
具有野生類型Optional<Optional<Any>>
。
任何 forms 的直接比較(使用 nil、.some(nil) 等)都因“任何不可比較”錯誤而失敗。
如何檢查觀察者的調用是否是初始的?
更新
出色地。
我正在觀察一個value: Any
from some attribute
。 真正的value
是由attribute
內部的二進制數據構造的,並且具有傳遞它的類型,真正的類型是Bool?
在這種情況下。 觀察者被正確觸發,這不是問題。
observe(\ViewController.attribute.value, options: [.initial, .new, .old]) { (_self, change) in
guard change.newValue as? Bool != change.oldValue as? Bool // does not work in initial
else {
return
}
...
}
在最初的情況下,我有
(lldb) po change
▿ NSKeyValueObservedChange<Optional<Any>>
- kind : __C.NSKeyValueChange
▿ newValue : Optional<Optional<Any>>
▿ some : Optional<Any>
- some : <null>
▿ oldValue : Optional<Optional<Any>>
- some : nil
- indexes : nil
- isPrior : false
新值為nil
( attribute.value ==.none
)。 根據文檔,舊值不得包含。 我應該怎么做才能確保它不是真的被包含在內?
似乎我發現了:
guard
case let oldValue? = change.oldValue, oldValue == nil ||
(change.newValue as? Bool != oldValue as? Bool)
else
{
return
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.