Ответ
Codable — это тип-псевдоним (typealias) в Swift, объединяющий протоколы Encodable и Decodable. Он предназначен для сериализации (кодирования) и десериализации (декодирования) типов данных в/из внешних форматов, таких как JSON или Property List (plist).
Основное назначение:
- Автоматическое преобразование структур и классов Swift в данные (например, для отправки на сервер).
- Автоматическое создание объектов Swift из полученных данных (например, ответа от сервера).
Пример использования с JSON:
// 1. Объявляем тип, соответствующий Codable
struct User: Codable {
let id: Int
let name: String
let email: String
}
// 2. Декодирование JSON в объект Swift
let jsonString = """
{
"id": 42,
"name": "Иван",
"email": "ivan@example.com"
}
"""
let jsonData = Data(jsonString.utf8)
let decoder = JSONDecoder()
let user = try decoder.decode(User.self, from: jsonData)
print(user.name) // Вывод: Иван
// 3. Кодирование объекта Swift в JSON
let newUser = User(id: 100, name: "Анна", email: "anna@example.com")
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let encodedData = try encoder.encode(newUser)
if let jsonString = String(data: encodedData, encoding: .utf8) {
print(jsonString)
}
Ключевые особенности:
- Автоматический синтез: Компилятор автоматически генерирует код для кодирования/декодирования, если все свойства типа также соответствуют
Codable. - Кастомизация: При необходимости можно переопределить процесс, реализовав протокол
CodingKeyдля сопоставления с другими именами ключей или создав собственный инициализаторinit(from:)и методencode(to:). - Поддержка форматов: Работает не только с
JSONEncoder/JSONDecoder, но и сPropertyListEncoder/PropertyListDecoder.
Практический совет: Используйте Codable для работы с сетевыми запросами и локальным сохранением структурированных данных. Это избавляет от написания ручного парсинга.