mutating
отмечает метод. inout
отмечает параметр. Это совершенно разные вещи.
Методы, отмеченные mutating
, могут изменять self
, т.е. устанавливать свойства self
, переназначать self
и т. Д.
struct Foo {
var foo: Int
mutating func mutate() {
foo += 1 // this is mutating self
}
}
Параметры, отмеченные inout
, в основном становятся var
переменными, а не let
константами. Вы можете изменить их, и эти изменения также будут отражены на стороне вызывающего абонента.
func f(_ x: inout Int) {
x = 10
}
var a = 1
f(&a)
print(a) // 10