Основы Codable в Swift 4. Лучше решения не найти

О

Swift 4 принес с собой множество крупных улучшений. И сегодня я хочу рассмотреть одно из них — новый протокол, входящий в стандартную библиотеку Swift, протокол Codable. Этот протокол позволяет соответствовать нашим собственным типам, что бы получить свободную функциональность кодирования и декодирования.

Кодирование и декодирование типов еще никогда не было проще!

Углубимся в Codable

Прежде чем мы начнем, давайте углубимся в смысл кодирования и декодирования. Чего мы этим добиваемся?

По сути, мы хотим взять экземпляр какого то объекта или структуры и преобразовать его (encode) в какой то другой формат (как правило, понятный процессору).

В современных реалиях, самым популярным форматом кодирования/декодирования является JSON. Он поддерживается везде, и обладает преимуществом читаемости как для человека так и для машины.

Поэтому, в этой статье мы сделаем упор на JSON. Он спроектирован для поддержки кодирования и декодирования в любой формат, который мы можем представить.

Раньше, для кодирования в JSON мы использовали (и сейчас можем использовать) JSONSerilization класс, что бы закодировать наши типы в JSON. Я даже затрагивал эту тему в одном из своих видеоуроков. А еще, ранее я писал о том, как использовать Flatmap в Swift на примере работы с JSON.

Этот способ и сейчас прекрасно работает, но входные данные (encoding) и выходные данные (decoding) будут либо массивами, либо словарями. И придется извлекать их вручную.

С Codable эту задачу можно реализовать куда проще и интереснее!

Let’s code Codable!

Давайте начнем с простой структуры, соответствующей протоколу Codable:

Теперь, все что нам нужно сделать что бы превратить наш «самолет» в JSON:

Этот код возвратит нам объект типа Data, данные, которые мы можем отправить на сервер, записать в БД или на диск. В общем — это готовые данные. Делайте с ними, что захотите.

Давайте преобразуем эти данные в строку:

Это напечатает в Log текст: {«name»:»Boeing 777″}

Готово! Обратите внимание, что мы не должны указывать имена ключей в JSON: они будут выведены автоматически из имен свойств нашей структуры.

Для декодирования мы легко можем пойти и другим путем:

Обратите внимание, так как .decode и .encode функции обладают риском (throw) ошибки, нам необходимо использовать ключевое слово try? что бы возвращать опциональный nil, если кодирование или декодирование не удалось.

Давайте рассмотрим еще одно классную «фишку» Codable.

Давайте добавим еще одну структуру и смешаем ее. Сейчас поймете, что я имею ввиду.

Готово! Теперь, когда мы закодируем наш Боинг (экземпляр Flight), система замечает, что свойство pilot так же поддерживает протокол Codable, и сделает все правильно за нас автоматически:

И на выходе мы получаем сообщение в Log:

{«name»:»Boeing 777″,»pilot»:{«firstName»:»James»,»lastName»:»Cameron»}}

Вот и все! В следующий раз мы рассмотрим использование Codable с более сложными типами данных, такими как Date (даты) например.

Код из урока: посмотреть

P.S: Кстати, многие из вас могут спросить: «Игорь, почему ты выбрал именно самолеты для примера в этом коде?». Тут нет ничего удивительного: последнее время я очень много программировал приложения для поиска авиабилетов и бронирования отелей, и эта тема глубоко въелась в мой мозг. Кстати, вы можете заказать и себе подобные приложения. MustHave для тур-бизнеса и туристических блогов. Вы можете получить консультацию, написав на info@justdev.org!

Поддержите ресурс blog.justDev:

Сведения об авторе

Игорь Малеваный

1 комментарий

Instagram

Поддержите ресурс blog.justDev:

Свежие записи

Рубрики