В Swift параметры inout позволяют изменять входные данные, переданные в функцию.
Например, давайте создадим функцию, которая изменяет исходное значение числовой переменной:
func change(_ number: inout Int){ number = 2 } var number = 1 change(&number) print(number)
В этом руководстве вы узнаете, зачем в Swift необходимы параметры inout и как они работают.
Параметры функции Swift не могут быть изменены
В Swift изменить значение параметра, переданного в функцию, невозможно. Это связано с тем, что аргумент функции является константой, а константы нельзя изменить.
Например:
func change(_ number: Int){ number = 2 } var number = 1 change(number) print(number)
Это приводит к ошибке:
main.swift:6:5: error: cannot assign to value: 'number' is a 'let' constant
Эта ошибка говорит именно о том, что я сказал вам выше. Вы не можете изменить константу.
Однако часто бывает полезно изменить параметр, переданный в функцию.
Как оказалось, это возможно с помощью входной параметры в Swift.
Входные параметры в Swift
Ан входной Параметр — это особый тип параметра, который можно изменить внутри функции, и изменения будут применяться вне функции.
Вот иллюстрация функции, которая принимает число А в качестве параметра inout и изменяет его:
Чтобы превратить параметр функции в входную переменную, которую можно изменить внутри функции:
- Измените параметр на параметр inout, используя команду входной модификатор ключевого слова.
- Использовать & при передаче аргумента в вызов функции.
Пример
Например, давайте напишем функцию, которая принимает аргумент, который обновляется в функции:
func change(_ number: inout Int){ number = 2 } var number = 1 change(&number) print(number)
Выход:
2
Как видите, мы меняем число ввод внутри функции, но изменение видно и вне функции.
Заключение
Быстрый входной Параметр — это параметр, который можно изменить внутри функции, в которую он передан.
- Чтобы принять входные параметры, используйте команду входной ключевое слово перед аргументом.
- Чтобы передать переменную в качестве параметра inout, используйте команду & оператор перед параметром.
Спасибо за прочтение. Приятного кодирования!