Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Swift : Swift, JSON, Codable, CodingKeys, reserved keyword

Как мапить JSON-ключи в свойства модели, если ключ совпадает с зарезервированным словом Swift?

Этот вопрос проверяет умение работать с JSON-декодированием в Swift, когда ключи JSON совпадают с зарезервированными словами языка, что необходимо для корректного парсинга данных из API.

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

В Swift для декодирования JSON используется протокол Codable. Если ключ в JSON совпадает с зарезервированным словом Swift (например, 'default', 'self', 'case'), компилятор выдаст ошибку. Чтобы это обойти, нужно определить перечисление CodingKeys внутри модели и явно указать соответствие между ключом JSON и свойством модели. В качестве имени свойства можно использовать обратные кавычки (`), чтобы использовать зарезервированное слово.

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

При работе с JSON в Swift протоколы Codable, Decodable и Encodable предоставляют удобный способ сериализации и десериализации данных. Однако иногда ключи в JSON могут совпадать с зарезервированными словами Swift, такими как default, self, case, return и другими. Использование таких слов в качестве имён свойств напрямую приведёт к ошибке компиляции.

Решение с помощью CodingKeys

Стандартный подход — определить перечисление CodingKeys внутри вашей модели, которое соответствует протоколу CodingKey. В этом перечислении вы можете указать, как ключ JSON должен быть сопоставлен с свойством модели. Для свойств, имена которых являются зарезервированными словами, можно использовать обратные кавычки (`) в имени свойства, а в CodingKeys задать строковый ключ из JSON.

Пример кода

Предположим, у нас есть JSON с ключом "default", который является зарезервированным словом в Swift.

import Foundation

struct Settings: Codable {
    let name: String
    // Используем обратные кавычки для имени свойства
    let `default`: Bool
    let value: Int

    // Определяем CodingKeys для маппинга
    enum CodingKeys: String, CodingKey {
        case name
        // Ключ JSON "default" мапится на свойство `default`
        case `default` = "default"
        case value
    }
}

// Пример JSON
let jsonString = """
{
    "name": "Auto-save",
    "default": true,
    "value": 10
}
"""

let jsonData = jsonString.data(using: .utf8)!
let decoder = JSONDecoder()
do {
    let settings = try decoder.decode(Settings.self, from: jsonData)
    print(settings.name)      // Auto-save
    print(settings.default)   // true
    print(settings.value)     // 10
} catch {
    print("Decoding error: \(error)")
}

Где это применяется

Этот подход необходим при работе с внешними API, где вы не контролируете структуру JSON. Часто такие ситуации возникают при интеграции с бэкенд-сервисами, которые могут использовать ключи, совпадающие с ключевыми словами различных языков программирования. Использование CodingKeys обеспечивает гибкость и позволяет адаптировать модель под любой JSON, сохраняя чистоту кода на Swift.

Вывод: Используйте перечисление CodingKeys и обратные кавычки для свойств, когда ключи JSON совпадают с зарезервированными словами Swift. Это стандартное и безопасное решение, которое обеспечивает корректное декодирование данных и предотвращает ошибки компиляции.

  • Аватар

    iOS Guru

    Roman Isakov

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

Уровень

  • Рейтинг:

    3

  • Сложность:

    3

Навыки

  • Swift

    Swift

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

#Swift

#JSON

#Codable

#CodingKeys

#reserved keyword

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

  • Аватар

    iOS Guru

    Roman Isakov

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