Inout swift как работает
С помощью оператора многоточия (. ) можно устанавливать произвольное количество параметров одного типа.
func sum(_ numbers: Int. ) -> Int < var total: Int = 0 for number in numbers< total+=number >return total > sum(1, 2, 3, 4, 5) // 15
Если параметр именнованный, то указывается его имя, после которого после двоеточия указываются через запятую все значения:
func sum(numbers: Int. ) -> Int < var total: Int = 0 for number in numbers< total+=number >return total > sum(numbers: 1, 2, 3, 4, 5) // 15
Выходные параметры inout
По умолчанию все параметры функции представляют константные значения, и мы не можем их изменить. Например, при определении следующей функции мы получим ошибку:
func increase(_ n : Int)
По умолчанию параметр n представляет константу, и его значение мы не можем изменить. Однако в ряде задач такое поведение может потребоваться. И если все таки необходимо изменить значение параметра, то его надо определить с ключевым словом inout :
func increase(_ n : inout Int) < n += 10 >var d = 20 increase(&d) print(d) // 30
При передачи переменных в функцию к ним добавляется знак амперсанда.То есть фактически мы передаем ссылку на переменную, а не просто ее значение. И, таким образом, сможем изменить значение переменной, определенной вне функции.
Другой показательный пример — обмен значений переменных:
func swap(a: inout Int, b: inout Int) < let temp = a a = b b = temp >var num1 = 10 var num2 = 13 swap(&num1, &num2) print(num1) // 13 print(num2) // 10
Да что такое этот ваш 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
Переменные параметры и inout в Swift — Введение в Swift
![]()
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Об обучении на Хекслете
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар « Как самостоятельно учиться »
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Используйте Хекслет по-максимуму!
- Задавайте вопросы по уроку
- Проверяйте знания в квизах
- Проходите практику прямо в браузере
- Отслеживайте свой прогресс

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу
Для перемещения по курсу нужно зарегистрироваться
1. Основы Swift ↳ теория
2. TypeAlias и Tuple в Swift ↳ теория
3. Optional в Swift ↳ теория
4. Операторы и серии в Swift ↳ теория
5. Строки в Swift ↳ теория
6. Массивы в Swift ↳ теория
7. Словари в Swift ↳ теория
8. Ветвление в Swift ↳ теория
9. Функции в Swift ↳ теория
10. Серия параметров в Swift ↳ теория
11. Переменные параметры и inout в Swift ↳ теория
12. Тип функции в Swift ↳ теория
13. Пример замыкания в Swift ↳ теория
14. Замыкание в Swift ↳ теория
15. Энумератор (перечисление) в Swift ↳ теория
16. Raw values в энумераторе в Swift ↳ теория
17. Структуры и классы в Swift ↳ теория
18. Value type vs. Reference type в Swift ↳ теория
19. Вычислимые (computed) свойства в Swift ↳ теория
20. Наблюдатели (property observers) в Swift ↳ теория
21. Свойства типа в Swift ↳ теория
22. Методы типа и экземпляра в Swift ↳ теория
23. Мутирующие (mutating) методы в Swift ↳ теория
24. Сабскрипты (subscripts) в Swift ↳ теория
25. Наследование в Swift ↳ теория
26. Инициализаторы в Swift ↳ теория
27. Деинициализаторы в Swift ↳ теория
28. ARC (automatic reference counting) в Swift ↳ теория
29. Расширения (extensions) в Swift ↳ теория
30. Протоколы в Swift ↳ теория
31. Generics в Swift ↳ теория
32. Generic тип в Swift ↳ теория
Поможем, если трудно
Порой обучение продвигается с трудом. Сложная теория, непонятные задания… Хочется бросить. Не сдавайтесь, все сложности можно преодолеть. Рассказываем, как
Не понятна формулировка, нашли опечатку?
Выделите текст, нажмите ctrl + enter и опишите проблему, затем отправьте нам. В течение нескольких дней мы улучшим формулировку или исправим опечатку
Что-то не получается в уроке?
Загляните в раздел «Обсуждение»:
- Изучите вопросы, которые задавали по уроку другие студенты — возможно, ответ на ваш уже есть
- Если вопросы остались, задайте свой. Расскажите, что непонятно или сложно, дайте ссылку на ваше решение. Обратите внимание — команда поддержки не отвечает на вопросы по коду, но поможет разобраться с заданием или выводом тестов
- Мы отвечаем на сообщения в течение 2-3 дней. К «Обсуждениям» могут подключаться и другие студенты. Возможно, получится решить вопрос быстрее!
Подробнее о том, как задавать вопросы по уроку
inout parameters
All parameters passed into a Swift function are constants, so you can’t change them. If you want, you can pass in one or more parameters as inout , which means they can be changed inside your function, and those changes reflect in the original value outside the function.
For example, if you want to double a number in place – i.e., change the value directly rather than returning a new one – you might write a function like this:
func doubleInPlace(number: inout Int)
To use that, you first need to make a variable integer – you can’t use constant integers with inout , because they might be changed. You also need to pass the parameter to doubleInPlace using an ampersand, & , before its name, which is an explicit recognition that you’re aware it is being used as inout .
In code, you’d write this:
var myNum = 10 doubleInPlace(number: &myNum)
SPONSORED Join a FREE crash course for mid/senior iOS devs who want to achieve an expert level of technical and practical skills – it’s the fast track to being a complete senior developer! Hurry up because it’ll be available only until January 28th.

BUY OUR BOOKS
Was this page useful? Let us know!