Avatar
protocol FooProtocol { var value: Int { get } init(value: Int) mutating func increment() } extension FooProtocol { mutating func increment() { self = Self(value: value + 1) } } final class Foo: FooProtocol { let value: Int init(value: Int) { self.value = value } // mutating func increment() { // self = Foo(value: value + 1) // } } func increment(_ self: inout Foo) { self = Foo(value: self.value + 1) } var foo: Foo = .init(value: 0) print(foo.value) foo.increment() //increment(&foo) print(foo.value)
12:37 PM
final class User { var age: Int init(age: Int) { self.age = age } func copy() -> User { User(age: age) } } final class Group { var members: [User] var owner: User { members[0].copy() } init(members: [User]) { self.members = members } } let user: User = .init(age: 42) let group: Group = .init(members: [user]) let owner = group.owner owner.age += 1 print(group.owner.age)