JSON - ›Swift
Codable - одна из тех замечательных функций, которые не должны ускользать от внимания любого начинающего разработчика в экосистеме Swift.
Сложность: Начинающий | Легко | Нормальный | Испытывающий
Предпосылки:
- В этой статье рассматривается Codable, поэтому было бы неплохо иметь некоторые знания о моделях, классах и структурах в Swift.
Терминология
Codable: псевдоним типа для Decodable & Encodable, который позволяет легко преобразовывать в сериализованный формат или из него (например, JSON).
JSON: JavaScript Object Notation, легкий формат для хранения и передачи данных.
Реализация: кодируемая
Типичное приложение берет данные из конечной точки и декодирует их в модель Swift. Поскольку structs
обычно представляют данные и являются типами значений, они подходят для моделей (более class
, хотя вам нужно принять собственное решение по этому поводу).
Этот пользовательский режим соответствует протоколу Codable
. Это означает, что мы можем выбрать либо кодирование, либо декодирование в (из) модели Swift UserModel
.
Мы можем закодировать это с помощью следующей функции:
Затем мы можем декодировать модель пользователя:
Проблема в том, что это простой случай. Формат JSON в точности соответствует модели, что является довольно прекрасным синергизмом задней и внешней сторон.
Это не всегда возможно в реальной жизни: серверная модель может не точно соответствовать struct
.
Реализация: кодируемый snake_case
На самом деле нам не следует использовать snake_case в коде Swift, но ваш бэкэнд-разработчик (это ведь не вы?) Считает, что это отличная идея.
Вместо того, чтобы прибегать к физическому нападению (в любом случае лучше этого не делать на работе), вы можете просто преобразовать snake_case во что-то более разумное, используя свой JSONDecoder.
Это было бы замечательно.
Это можно сделать, слегка подтолкнув “user_Id”: 1
к userId
.
Затем мы можем добавить следующую строку сразу после объявления декодера (это let decoder = JSONDecoder()
)
decoder.keyDecodingStrategy = .convertFromSnakeCase
Реализация: несовпадающие имена ключей
У нас может быть строка JSON, детализированная следующим образом:
let data = “”” { “idforuser”: 1, “globalid”: 2, “usertitle”: “test”, “complete”: true } “””
Я решил записать это в расширение, которое представляет собой перечисление CodingKeys (которое представляет собой перечисление, которое использует строки для необработанного значения)
Реализация: вложенный JSON
которому тогда нужна немного другая модель; то есть тот, который может быть объединен с другим Struct:
После этого к владельцу можно будет получить доступ через content.owner.name
или content.owner.age
.
Анализ данных с использованием кодирования
Если вам нужно преобразовать дату из JSON в вашу модель структуры, декодер поможет вам
Можно ожидать, что вы будете использовать формат ISO8601 при обработке дат (и вам следует сделать это).
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
и на самом деле вы даже можете использовать пользовательские форматы, как со стандартным форматером даты
let readableDateFormatter = DateFormatter()
readableDateFormatter.dateFormat = "M-dd-yyyy HH:mm"
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(formatter)
dateDecodingStrategy
может даже обработать закрытие с помощью пользовательской функции.
Вывод:
Послушайте, в мире разработки программного обеспечения есть одна вещь, которую вам, вероятно, придется делать неоднократно. То есть вам нужно будет преобразовать данные JSON в объекты Swift.
Codable поможет вам в этом!
В этом руководстве представлены способы, которые помогут вам завершить проект с помощью кодируемости и использовать эту замечательную функцию от Apple - и не забывайте о забавном форматировании дат, о котором мы поговорим в конце этой статьи.
Расширьте свои знания
- Документация Apple достаточно хорошо объясняет эту тему.
- Я написал статью о соглашениях об именах в языках программирования.
Контактное лицо в Twitter:
Любые вопросы? Вы можете связаться со мной ЗДЕСЬ