我有类似
的课程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个代码副本(我真的不喜欢)
我正在寻找一种方法,我如何编写一段代码(对多个副本)来观察所有成员的变化。
答案 0 :(得分:1)
一种可能的解决方案是将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
的更改,因此观看每个属性的方法都不起作用 - 它会看{ {1}}属性!
答案 1 :(得分:1)
这可以通过以下方式在目标C中实现:
然后为updated_at添加自定义setter。请点击此链接了解详情。 https://www.objc.io/issues/7-foundation/key-value-coding-and-observing/