@swift-6.0.3 struct CoW<Value> { final class Storage { var value: Value init(_ value: Value) { self.value = value } } private var storage: Storage init(_ value: Value) { self.storage = Storage(value) } var value: Value { get { storage.value } set { if !isKnownUniquelyReferenced(&storage) { storage = Storage(newValue) } else { storage.value = newValue } } } } struct MyStruct { var age: Int var next: CoW<MyStruct>? } var aaa = MyStruct(age: 1, next: .init(.init(age: 2))) let iii = aaa print(aaa.next?.value.age) print(iii.next?.value.age) aaa.next?.value.age += 100 print(aaa.next?.value.age) print(iii.next?.value.age)