簡體   English   中英

Swift Extension中的KVO

[英]KVO within Swift Extension

我該如何進行擴展以觀察正在擴展的類上的屬性,同時又可以在以后刪除它?

例如:

我有一個UIView,我想在UIView擴展中監聽框架的變化。 當發生這些更改時,我需要運行一些代碼,以根據新框架更改視圖外觀。

我遇到的問題是,盡管我可以設置觀察者,卻找不到解決方法。 沒有deinit(),我希望觀察者可以在UIView的生命周期中徘徊。

我寧願不必將清除責任歸於開發人員,並且我不想繼承。

如果我想知道一種更好的方法,它甚至不必是KVO。

通常的解決方案是使用關聯的對象作為釋放間諜。 解除關聯對象的釋放后,關聯對象將被釋放,因此您可以在它們的deinit中運行要在deinit對象消失時觸發的代碼。 也就是說,至少在多線程環境中做到這一點確實有些棘手。 我不建議自己建立。 相反,我建議使用PMKVObserver來為您處理。 即使您選擇構建自己的,也應研究PMKVObserver如何發揮其魔力,這樣您就不會過於幼稚地實施。

在Swift中謹慎地執行此操作(不必擔心多線程競爭條件)並不是一件容易的事,但最好在ObjC中做到這一點,並與Swift結合起來,這樣才能做到最好。 再次,請參考代碼以解決棘手的問題。

擴展可以將新的便捷初始化程序添加到類,但不能將新的指定初始化程序或反初始化程序添加到類。 指定的初始化程序和反初始化程序必須始終由原始類實現提供。

因此,我認為如果沒有子類化,您將無法以任何不錯的方式處理它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM