Ответ
Параметр inout позволяет передавать переменную в функцию по ссылке, чтобы её модифицировать внутри функции, и изменения сохранялись после её завершения. По умолчанию параметры в Swift передаются по значению (создаётся копия).
Пример использования:
func swapValues(_ a: inout Int, _ b: inout Int) {
let temp = a
a = b
b = temp
}
var x = 5
var y = 10
swapValues(&x, &y) // Передача с амперсандом &
print(x, y) // Вывод: 10, 5
Ключевые правила и нюансы:
- Можно передавать только переменные (
var), но не константы (let) или литералы. - При вызове функции перед аргументом обязательно ставится
&. - Нельзя передавать вычисляемые свойства (без явного геттера/сеттера) или свойства, являющиеся константами.
- Использование
inoutдля больших структур может повлиять на производительность, так как происходит копирование при входе и выходе из функции (copy-in copy-out семантика).