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