Swift Academy · Урок

Связанные значения для сложных данных

Добавляйте данные к вариантам перечисления и извлекайте их с помощью сопоставления с образцом.

Урок 2 из 412 шагов

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

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

Связанные значения позволяют каждому варианту перечисления хранить дополнительные данные. Они превращают перечисления в мощные размеченные объединения — основу типобезопасного моделирования состояний в Swift.

Определение связанных значений

```swift enum Barcode { case upc(Int, Int, Int, Int) case qrCode(String) } let product = Barcode.upc(8,85909,51226,3) let web = Barcode.qrCode("https://example.com") ```

Извлечение данных с помощью switch

```swift switch barcode { case .upc(let n, let m, let p, let c): print("UPC: \(n)-\(m)-\(p)-\(c)") case .qrCode(let code): print("QR: \(code)") } ``` Или используйте `case let`, чтобы связать все значения за один шаг: ```swift case let .upc(n,m,p,c): ... ```

Именованные ассоциированные значения

```swift enum NetworkResult { case success(statusCode: Int, data: Data) case failure(error: Error) } if case .success(let code, let data) = result { ... } ``` Метки делают контекст связывания понятным.

Ассоциированные значения и исходные значения

• Исходные значения: константы времени компиляции, один тип для всех вариантов, свойство `rawValue` • Ассоциированные значения: данные времени выполнения, собственный тип у каждого варианта, извлекаются с помощью сопоставления с образцом Нельзя использовать оба вида значений в одном перечислении.

Опциональные значения как перечисления

Тип `Optional` в Swift буквально выглядит так: ```swift enum Optional { case some(Wrapped) case none } ``` Каждая конструкция `if let`, `switch`, `??` работает с этим же механизмом.

Результат: успешное выполнение или ошибка

```swift func fetch() -> Result { ... } switch fetch() { case .success(let data): process(data) case .failure(let err): print(err) } ``` `Result` — это перечисление стандартной библиотеки с двумя вариантами, имеющими ассоциированные значения.

Сопоставление с образцом в условии

```swift let item = Barcode.qrCode("hello") if case .qrCode(let code) = item { print("QR code: \(code)") } ``` Конструкция `if case` удобна, когда Вас интересует только один вариант.

Проверка с защитным условием

```swift func process(_ result: NetworkResult) { guard case .success(_, let data) = result else { return } handle(data) } ``` Конструкция `guard case` завершает выполнение раньше, если образец не совпадает.

Перечисления в коллекциях

```swift let events: [AppEvent] = [.login("alice"), .pageView("/home"), .logout] let logins = events.compactMap { if case .login(let u) = $0 { return u } else { return nil } } ```

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

Какое ключевое слово используется для извлечения ассоциированных значений внутри варианта `switch`?

Итоги

Основные выводы: • Ассоциированные значения прикрепляют данные к отдельным вариантам • Извлекайте их с помощью `switch`, `if case` или `guard case` • Используйте именованные метки для ясности: `.success(code: Int, data: Data)` • `Optional` и `Result` — перечисления стандартной библиотеки с ассоциированными значениями • Нельзя совмещать ассоциированные и исходные значения в одном перечислении Далее: непрямые перечисления и рекурсивные структуры.
Можно начать бесплатно

Изучай Swift с ИИ-репетитором — бесплатно

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

Курсы
122
Уроки
409

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

Урок «Связанные значения для сложных данных» бесплатный?

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

Чему я научусь в уроке «Связанные значения для сложных данных»?

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

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

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

Сколько времени занимает урок «Связанные значения для сложных данных»?

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

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

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

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

  1. Исходные значения и CaseIterable
  2. Связанные значения для сложных данных
  3. Косвенные перечисления и рекурсивные структуры
  4. Моделирование конечных автоматов с помощью перечислений
← Назад к Swift Academy