Comments 18
Создадим для него модель данных:
struct Mac: Codable {
var name: String
var screenSize: Int
var cpuCount: Int
}

Только 1 вопрос — почему нельзя использовать JSON в качестве модели + parser который эту модель обрабатывает? Как минимум будет все короче и легче рефакториться при добаление новых ключей.

Зачем использовать дополнительный parser, если Codable автоматически сам распарсит все поля? Если надо добавить еще поля в модель, то это делается одной строкой, добавляете поле и все, не вижу никаких проблем. Codable для того и существует, чтобы не писать лишний код

Вы не ответили на вопрос. Сodable распарсит по модели. Но сама модель это код, а не JSON. Я про это.

Сложно понять, что вы хотите добиться, если вам нужен JSON, то вы его получите после сетевого запроса и можете делать с ним что хотите, можете оставить так и хранить, например, если же вам нужны данные из JSON, то Decodable распарсит.

Я хочу добиться адаптивного поведения не залазя в код, а настраивая только JSON

Вопрос в количестве телодвижений. Лично у меня не получилось, например, красиво и с минимальным вмешательством в код создать нормальный сетевой движок для сервера, с которым я работаю. 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)
Кстати, не поленился и посмотрел в плейграунде. Там еще несколько ошибок. Рекомендую всё же потестить код и внести исправления.
Это String, а не Double и Int:
«average»: «4.1034»,
«votes_count»: «29»

Ключи не совпадают:
«average_rating» и «average»
Благодарю за такую подробную статью.
А что насчет производительности по сравнению со SwiftyJSON? Находил сравнения с Manual, но не с вышеупомянутой библиотекой. Есть ли критичная разница при работе с большими объемами данных?
Only those users with full accounts are able to leave comments. Log in, please.