Перейти к содержимому

Inout swift как работает

  • автор:

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, которую можно изменять внутри функции:

  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

Переменные параметры и 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 и опишите проблему, затем отправьте нам. В течение нескольких дней мы улучшим формулировку или исправим опечатку

Что-то не получается в уроке?

Загляните в раздел «Обсуждение»:

  1. Изучите вопросы, которые задавали по уроку другие студенты — возможно, ответ на ваш уже есть
  2. Если вопросы остались, задайте свой. Расскажите, что непонятно или сложно, дайте ссылку на ваше решение. Обратите внимание — команда поддержки не отвечает на вопросы по коду, но поможет разобраться с заданием или выводом тестов
  3. Мы отвечаем на сообщения в течение 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.

Swift breaks down barriers between ideas and apps, and I want to break down barriers to learning it. I’m proud to make hundreds of tutorials that are free to access, and I’ll keep doing that whatever happens. But if that’s a mission that resonates with you, please support it by becoming a HWS+ member. It’ll bring you lots of benefits personally, but it also means you’ll directly help people all over the world to learn Swift by freeing me up to share more of my knowledge, passion, and experience for free! Become Hacking with Swift+ member.

BUY OUR BOOKS

Was this page useful? Let us know!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *