Avatar
Property Wrapper struct User: Equatable { var name: String var age: Int } @propertyWrapper final class Box<Value> { var wrappedValue: Value init(wrappedValue value: Value) { self.wrappedValue = value } var projectedValue: Ref<Value> { Ref<Value>( get: { self.wrappedValue }, set: { newValue in self.wrappedValue = newValue} ) } } @propertyWrapper struct Ref<Value> { let get: () -> Value let set: (Value) -> Void var wrappedValue: Value { get { get() } set { set(newValue) } } } do { var a: User = .init(name: "Swift", age: 8) //var b: Ref<User> = .init(get: { a }, set: { newValue in a = newValue }) @Ref var b: User _b = .init(get: { a }, set: { newValue in a = newValue }) b.age = 9 print(a.age) print(b.age) print(a == b) //print(b.wrappedValue.age) @Box var c: User = .init(name: "Swift", age: 8) @Ref var d: User _d = $c }
👍🏻 1