Я пытаюсь по существу сделать @PropertyWrapper действовать как получатели и установщики для существующих частных членов экземпляра. Ниже у меня есть мой WIP. Проблема в том, что я не могу ссылаться на члена экземпляра, так как не могу получить доступ к себе. Оболочки не могут быть ленивыми, и ленивый член не помогает. У меня есть эта тема (https://twitter.com/jckarter/status/1161298507527000064) и эта часть предложения быстрой эволюции (https://github.com/apple/swift-evolution/blob/master/proposals/0258-property-wrappers.md#referencing-the-enclosing-self-in-a-wrapper-type),), но я просто не получаю ее. Любой совет?
@propertyWrapper
struct PrivateWrapper<MemberOwner: AnyObject, MemberListener> {
var privateVar: MemberOwner
var member: ReferenceWritableKeyPath<MemberOwner, MemberListener>
var wrappedValue: MemberListener {
get {
return privateVar[keyPath: member]
}
mutating set {
privateVar[keyPath: member] = newValue
}
}
}
class A {
var memberA: String
var memberB: Int
init(_ a: String, _ b: Int) {
memberA = a
memberB = b
}
}
class B {
private var aInst = A("Hello", 0)
// Both wrappers get the following error:
// "Cannot use instance member 'aInst' within property initializer;
// property initializers run before 'self' is available"
@PrivateWrapper(privateVar: aInst, member: \A.memberA) var newAString: String
@PrivateWrapper(privateVar: aInst, member: \A.memberB) var newBInt: Int
}