簡體   English   中英

如何在Swift(或ObjectiveC)中觀察對象的所有類成員的變化?

[英]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

每個成員都有一個明顯的解決方案(添加willSetdidSet )來更新updated_at

但是,這將需要將willSetdidSet添加到每個類成員。 結果,如果有100個,我將需要有100個代碼副本(我真的不喜歡)

我正在尋找一種方法來編寫一次代碼(對比多個副本),該代碼將觀察所有成員的更改。

一種可能的解決方案是將barbaz組合到一個觸發更新的元組中,然后將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中使用以下方法實現:

  • (NSSet *)keyPathsForValuesAffecting {return [NSSet setWithObject:@“ bar”,@“ baz”,nil]; }

然后為update_at添加自定義設置器。 請點擊此鏈接以獲取詳細信息。 https://www.objc.io/issues/7-foundation/key-value-coding-and-observing/

暫無
暫無

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

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