Зачем использовать дополнительный parser, если Codable автоматически сам распарсит все поля? Если надо добавить еще поля в модель, то это делается одной строкой, добавляете поле и все, не вижу никаких проблем. Codable для того и существует, чтобы не писать лишний код
Сложно понять, что вы хотите добиться, если вам нужен JSON, то вы его получите после сетевого запроса и можете делать с ним что хотите, можете оставить так и хранить, например, если же вам нужны данные из JSON, то Decodable распарсит.
Вопрос в количестве телодвижений. Лично у меня не получилось, например, красиво и с минимальным вмешательством в код создать нормальный сетевой движок для сервера, с которым я работаю. AlamofireObjectMapper сильно помог, и сильно сократил количество кода. Codable — это определенно шаг вперед, но это не панацея, к сожалению, и сторонние либы все равно мощнее, иногда ощутимо. Не нужно изобретать велосипед, изобретенный до вас, Codable поможет в легких случаях, но полноценное сложное сетевое ядро на нем особо не напишешь (или придется потратить больше времени и строк кода, чем хотелось бы). На мой взгляд, конечно.
Codable безусловно не панацея, и можно использовать сторонние библиотеки, к сожалению AlamofireObjectMapper не использовал, пробовал только SwiftyJSON, но в итоге больше понравился Decodable и у меня весь проект сделан на нем, более 50 APIшек со структурами данных разной сложности, без проблем. Но, зная Alamofire, думаю у них тоже достойный продукт.
ObjectMapper, насколько я знаю, писал другой специалист, не разработчики Alamofire, но могу ошибаться. Если сравнивать SwiftyJSON с Codable, то я с вами соглашусь, они очень близки по функционалу. Попробуйте AlamofireObjectMapper, думаю, в будущем он поможет вам сократить количество времени и кода на сетевое ядро. Мне понравилось, во всяком случае. SwiftyJSON/Codable не подошли конкретному к моему проекту, специфический сервер. А так — лишь бы нравилось, если конкретное решение вам подошло — это замечательно.
Спасибо за статью!
Пора тоже переходить со SwiftyJSON на Codable.
В примере с nested-контейнером, я так понимаю, ошибка. Верно будет так:
self.votesCount = try? ratingsContainer.decode(Int.self, forKey: .votesCount)
self.averageRating = try? ratingsContainer.decode(Double.self, forKey: .averageRating)
Благодарю за такую подробную статью.
А что насчет производительности по сравнению со SwiftyJSON? Находил сравнения с Manual, но не с вышеупомянутой библиотекой. Есть ли критичная разница при работе с большими объемами данных?
Парсинг и работа с Codable в Swift 4