Какое ключевое слово в Swift позволяет функции изменять значение переданного параметра?

«Какое ключевое слово в Swift позволяет функции изменять значение переданного параметра?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ключевое слово inout.

Оно указывает, что параметр передаётся по ссылке, а не по значению. Это позволяет функции модифицировать исходную переменную, переданную извне.

Синтаксис и правила:

  1. Объявление функции: Параметр помечается как inout.
  2. Вызов функции: Перед аргументом ставится амперсанд (&), явно указывающий на передачу по ссылке.
  3. Можно передавать: Только переменные (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 параметром значение переменной копируется в функцию, изменяется внутри, а затем копируется обратно в исходную переменную при завершении функции. С семантической точки зрения это похоже на передачу по ссылке.

Применение: Часто используется для функций, которые должны возвращать более одного результата через параметры, или для модификации значений внутри структур (которые по умолчанию передаются по значению).