// // ProxPropertyWrapper.swift // VDS // // Created by Matt Bruce on 7/29/22. // import Foundation //https://www.swiftbysundell.com/articles/accessing-a-swift-property-wrappers-enclosing-instance/ @propertyWrapper public struct AnyProxy { private let keyPath: ReferenceWritableKeyPath public init(_ keyPath: ReferenceWritableKeyPath) { self.keyPath = keyPath } @available(*, unavailable, message: "The wrapped value must be accessed from the enclosing instance property.") public var wrappedValue: Value { get { fatalError() } set { fatalError() } } public static subscript( _enclosingInstance observed: EnclosingSelf, wrapped wrappedKeyPath: ReferenceWritableKeyPath, storage storageKeyPath: ReferenceWritableKeyPath ) -> Value { get { let storageValue = observed[keyPath: storageKeyPath] let value = observed[keyPath: storageValue.keyPath] return value } set { let storageValue = observed[keyPath: storageKeyPath] observed[keyPath: storageValue.keyPath] = newValue } } } extension NSObject: ProxyContainer {} public protocol ProxyContainer { typealias Proxy = AnyProxy }