Avatar
KeyPath Member Lookup struct User { var name: String var age: Int } @dynamicMemberLookup final class Box<Value> { var value: Value init(_ value: Value) { self.value = value } subscript<T>(dynamicMember keyPath: WritableKeyPath<Value, T>) -> T { get { value[keyPath: keyPath] } set { value[keyPath: keyPath] = newValue } } } //var a: User = .init(name: "Swift", age: 8) //var b = a //a.age = 9 //print(a.age) //print(b.age) let a: Box<User> = .init(User(name: "Swift", age: 8)) let b = a a.age = 9 print(a.age) print(b.age)