Swift БАЗА
June 18, 2022

Да что такое этот ваш inout

По умолчанию параметры функции являются константами/неизменяемыми, и если вы попытаетесь изменить значение параметра функции в теле функции, это приведет к ошибке компиляции. Поэтому, если вы хотите, чтобы функция изменяла значение параметра и чтобы эти изменения сохранялись после завершения вызова функции, определите этот параметр как in-out параметр.

Что ж, пришло время разобрать пример:

var number = 6

func doubleNumber(num: Int) -> Int {
    return num * 2
}

print(doubleNumber(num: number))
//Prints 12

print(number)
//Prints 6

В приведенном выше коде вы увидите, что ни переменная "number" никогда не изменяется, ни параметру "num" не может быть присвоено какое-либо значение, или, по сути, можно сказать, что он неизменяем.

Но что если вы хотите, чтобы и переменная number изменялась, и параметр num был изменяемым?

Inout Параметр в Swift

Параметр inout - это особый тип параметра, который может быть изменен внутри функции, а изменения применяются вне функции.

Вот иллюстрация функции, которая принимает число A в качестве выходного параметра и изменяет его:

Чтобы превратить параметр функции в переменную inout, которую можно изменять внутри функции:

  1. Измените параметр на inout-параметр с помощью модификатора ключевого слова inout.
  2. Используйте & при передаче аргумента в вызове функции.

Да, вы можете сделать это, добавив ключевое слово inout непосредственно перед типом параметра, и поставить амперсанд (&) непосредственно перед именем переменной, когда вы передаете ее в качестве аргумента к параметру in-out, чтобы указать, что она может быть изменена функцией.

var number = 6

func doubleNumber(num: inout Int) -> Int {
    num *= 2
    return num
}

print(doubleNumber(num: &number))
//Prints 12

print(number)
//Prints 12