Да что такое этот ваш 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, которую можно изменять внутри функции:
- Измените параметр на inout-параметр с помощью модификатора ключевого слова inout.
- Используйте & при передаче аргумента в вызове функции.
Да, вы можете сделать это, добавив ключевое слово 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