从 Swift 的属性包装器中,您是否可以参考拥有被包装属性的类的实例或被击中?usingself
显然不起作用,super
.
我试图传递self
给属性包装器init()
,但这也不起作用,因为self
在评估时尚Configuration
未定义on 。@propertywrapper
我的用例是用于管理大量设置或配置的类。如果任何属性发生变化,我只想通知相关方发生了一些变化。他们并不真的需要知道哪个值,所以对每个属性使用类似KVO
或 a的东西并不是真正必要的。Publisher
属性包装器看起来很理想,但我不知道如何传递对包装器可以回调的拥有实例的某种引用。
参考:
enum PropertyIdentifier {
case backgroundColor
case textColor
}
@propertyWrapper
struct Recorded<T> {
let identifier:PropertyIdentifier
var _value: T
init(_ identifier:PropertyIdentifier, defaultValue: T) {
self.identifier = identifier
self._value = defaultValue
}
var value: T {
get { _value }
set {
_value = newValue
// How to callback to Configuration.propertyWasSet()?
//
// [self/super/...].propertyWasSet(identifier)
}
}
}
struct Configuration {
@Recorded(.backgroundColor, defaultValue:NSColor.white)
var backgroundColor:NSColor
@Recorded(.textColor, defaultValue:NSColor.black)
var textColor:NSColor
func propertyWasSet(_ identifier:PropertyIdentifier) {
// Do something...
}
}