Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Swift : codable, codingkeys

Как обрабатывать ситуацию, когда ключи JSON не совпадают с названиями свойств модели?

Вопрос проверяет знание механизмов кастомного маппинга данных при декодировании JSON в модели Swift.

Короткий ответ

Если ключи JSON отличаются от имен свойств модели, используется CodingKeys. Это перечисление позволяет явно сопоставить JSON-ключи и свойства Swift. Такой подход сохраняет читаемые имена свойств в коде. При необходимости можно реализовать кастомный init(from:). Это стандартный и безопасный способ работы с несовпадающими ключами.

Длинный ответ

На практике почти всегда JSON от сервера не идеально совпадает с неймингом в Swift, поэтому важно уметь корректно настраивать маппинг.

Базовый механизм — CodingKeys

CodingKeys — это перечисление, которое определяет соответствие между ключами JSON и свойствами модели.

Простой пример

JSON:

{
  "user_id": 10,
  "user_name": "Alex"
}

Модель:

struct User: Decodable {
    let id: Int
    let name: String

    enum CodingKeys: String, CodingKey {
        case id = "user_id"
        case name = "user_name"
    }
}

Что здесь важно:

  1. Имена свойств остаются id и name.

  2. JSON-ключи инкапсулированы внутри модели.

  3. Внешний код не знает о формате JSON.

Когда CodingKeys недостаточно

Иногда формат данных сложнее стандартного сопоставления.

Типичные случаи:

  1. Вложенные объекты.

  2. Опциональные или условные поля.

  3. Разные типы данных (строка вместо числа).

Кастомный init(from:)

init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    id = try container.decode(Int.self, forKey: .id)
    name = try container.decodeIfPresent(String.self, forKey: .name) ?? "Unknown"
}

Альтернативные подходы

Иногда используют:

  1. keyDecodingStrategy = .convertFromSnakeCase для простых случаев.

  2. DTO-модели, которые маппятся в domain-модели вручную.

Практический вывод

CodingKeys — основной и рекомендуемый способ работы с несовпадающими ключами JSON. Кастомное декодирование стоит применять только тогда, когда стандартного механизма недостаточно.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Swift

    Swift

Ключевые слова

#codable

#codingkeys

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.