0Pricing
Swift Academy · Урок

Параметры inout и возврат нескольких значений

Изменяйте аргументы с помощью inout и возвращайте несколько значений через кортежи

«Параметры inout и возврат нескольких значений» — бесплатный урок Swift Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Добро пожаловать

Обычно функции Swift работают с копиями значений. Параметры `inout` позволяют функции напрямую изменять переменную вызывающего кода. Кортежи позволяют функциям возвращать несколько значений одновременно.

Ключевое слово inout

Пометьте параметр как `inout`, чтобы изменять исходное значение: ```swift func doubleInPlace(_ value: inout Int) { value *= 2 } var x = 5 doubleInPlace(&x) print(x) // 10 ``` Префикс `&` в месте вызова показывает, что переменная может быть изменена.

inout со структурами

```swift struct Point { var x: Double; var y: Double } func translate(_ p: inout Point, dx: Double, dy: Double) { p.x += dx p.y += dy } var origin = Point(x: 0, y: 0) translate(&origin, dx: 3.0, dy: 4.0) // origin is now (3.0, 4.0) ```

Ограничения inout

• Константы (`let`) нельзя передавать как `inout` • Литералы нельзя передавать как `inout` • Индексы и вычисляемые свойства можно передавать как `inout`, если у них есть методы установки значения ```swift let c = 5 doubleInPlace(&c) // ❌ cannot pass let as inout ```

Возврат нескольких значений с помощью кортежей

Верните несколько значений, объединив их в кортеж: ```swift func minMax(of array: [Int]) -> (min: Int, max: Int) { (array.min()!, array.max()!) } let result = minMax(of: [3, 1, 7, 2]) print(result.min, result.max) // 1 7 ```

Именованные и безымянные элементы кортежа

Именованные элементы делают кортежи самодокументируемыми: ```swift let named: (width: Int, height: Int) = (1920, 1080) print(named.width) // 1920 let unnamed = (1920, 1080) print(unnamed.0) // 1920 ``` Для кортежей, возвращаемых функциями, предпочтительнее использовать имена.

Деструктуризация возвращаемых кортежей

Распакуйте возвращаемый кортеж в несколько переменных: ```swift let (minimum, maximum) = minMax(of: [5, 3, 8]) print(minimum) // 3 print(maximum) // 8 ``` Используйте `_`, чтобы отбросить ненужные элементы: `let (minimum, _) = minMax(of: arr)`.

Необязательные возвращаемые кортежи

Возвращайте nil в случаях ошибки: ```swift func parse(_ s: String) -> (Int, Int)? { let parts = s.split(separator: ",") guard parts.count == 2, let a = Int(parts[0]), let b = Int(parts[1]) else { return nil } return (a, b) } ```

Обмен с помощью inout

Классический обмен с использованием inout: ```swift func swap(_ a: inout T, _ b: inout T) { let temp = a a = b b = temp } var m = 1, n = 2 swap(&m, &n) print(m, n) // 2 1 ``` Стандартная библиотека Swift уже предоставляет `swap(_:_:)` — писать собственную функцию не нужно.

Когда использовать inout, а когда возвращаемое значение

Предпочитайте возвращать новое значение вместо изменения значения через inout: ```swift // Prefer: func normalised(_ v: SIMD3) -> SIMD3 { v / v.magnitude } // Use inout only when mutation is expected API contract, e.g. algorithms on large arrays func sort(_ arr: inout [Int]) { arr.sort() } ```

Быстрая проверка

Какой префикс требуется в месте вызова при передаче переменной параметру `inout`?

Итоги

Ключевые выводы: • `inout` позволяет функциям изменять переменные вызывающего кода; передавайте их с помощью `&` • Нельзя передавать константы `let` или литералы как параметры inout • Кортежи позволяют удобно возвращать несколько значений; называйте элементы для ясности • Деструктурируйте кортежи: `let (a, b) = f()` • Предпочитайте возвращать новые значения; используйте inout только когда изменение является частью контракта интерфейса Далее: функции как значения первого класса.

Часто задаваемые вопросы

Урок «Параметры inout и возврат нескольких значений» бесплатный?

Да — полный текст урока «Параметры inout и возврат нескольких значений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Параметры inout и возврат нескольких значений»?

Изменяйте аргументы с помощью inout и возвращайте несколько значений через кортежи Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Параметры inout и возврат нескольких значений»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Метки аргументов и имена параметров
  2. Параметры по умолчанию и вариативные параметры
  3. Параметры inout и возврат нескольких значений
  4. Функции как значения первого класса
← Назад к Swift Academy