Value types can gain mutating methods through extensions.

Change a value in place

mutating_extensions.swift
struct Counter {
    var value: Int
}

extension Counter {
    mutating func add(_ amount: Int) {
        value += amount
    }
}

let amount = 
var counter = Counter(value: 10)
counter.add(amount)
let message = "counter=\(counter.value)"

print(message)
struct Counter {
    var value: Int
}

extension Counter {
    mutating func add(_ amount: Int) {
        value += amount
    }
}

let amount = 
var counter = Counter(value: 10)
counter.add(amount)
let message = "counter=\(counter.value)"

print(message)
struct Counter {
    var value: Int
}

extension Counter {
    mutating func add(_ amount: Int) {
        value += amount
    }
}

let amount = 
var counter = Counter(value: 10)
counter.add(amount)
let message = "counter=\(counter.value)"

print(message)
mutating extension A mutating extension method can update `self` for value types such as structs.