[英]How to observe changes of all class members for an object in Swift (or ObjectiveC)?
我上課像
class Foo {
var bar : Int = 0
var baz : Boolean = false
var updated_at : NSDate
}
我從NSObject繼承的類很好(如果有一些可以使用的Objective-C好東西)。
我想有一些代碼,每次更改bar或baz時都會自動更新updated_at
。
每個成員都有一個明顯的解決方案(添加willSet
或didSet
)來更新updated_at
。
但是,這將需要將willSet
或didSet
添加到每個類成員。 結果,如果有100個,我將需要有100個代碼副本(我真的不喜歡)
我正在尋找一種方法來編寫一次代碼(對比多個副本),該代碼將觀察所有成員的更改。
一種可能的解決方案是將bar
和baz
組合到一個觸發更新的元組中,然后將didSet
添加到其中:
class Foo {
var values: (bar: Int, baz: Bool) = (0, false) {
didSet {
self.updated_at = NSDate()
}
}
var updated_at = NSDate()
}
像這樣訪問它們:
let foo = Foo()
foo.values.bar = 10 // will trigger the didSet method
這種方法的一個優點是,您可以在不會觸發更新的values
元組之外添加其他屬性。 舉例來說,我不認為你想更改updated_at
觸發改變updated_at
,所以方法觀看每一個屬性是行不通的-這將是觀看updated_at
屬性呢!
這可以在目標C中使用以下方法實現:
然后為update_at添加自定義設置器。 請點擊此鏈接以獲取詳細信息。 https://www.objc.io/issues/7-foundation/key-value-coding-and-observing/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.