#json #ios #coredata #objective_c #afnetworking
Я расширяю процедуру уже написанного предварительно дампа базы данных на iOS-клиент. Клиент получает с сервера JSON наполненный значениями. Правильно ли для значений типа "число" создавать в Core Data-сущностях атрибут типа NSNumber? В предыдущей реализации программисты решили передавать все значения (в том числе числовые) типом "строка" и уже на клиенте разбирать что число а что стринга. Есть ли здесь какой-то подтекст (может я могу столкнуться с какими-то неудобствами в будущем) или это просто неверная реализация?
Ответы
Ответ 1
Ответ на первый вопрос: да, правильно - используйте NSNumber. Без вариантов. Ответ на второй вопрос: Желательно, чтобы ваш сервер по API отдавал числа всё-таки в числовом виде ("числа - это числа"), но если есть проблемы с тем, чтобы переделать серверную сторону, вам нужно будет просто "строковые" числа преобразовывать в NSNumber, используя NSNumberFormatter (первый гугл показывает How to convert NSString into NSNumber) Подтекст очень простой - вы тратите дополнительное время на преобразование чисел в строки (на сервере) и строк в числа (на iOS-клиенте). Это немного, но всё же маленький overhead. И вы тратите у себя на клиенте время на написание дополнительных NSNumberFormatter-деклараций. Резюме: если можете, заставьте парней на сервере это всё переделать. Будет чисто и правильно. И небольшое добавление: бывают такие люди, которые очень хорошо знают всякие HTTP-стандарты и REST-стандарты и всякие, в общем, стандарты. Так вот такие люди ответили бы на ваш вопрос точно также, как я, только ещё привели бы штук 10 сокрушительных доводов на 10 абзацев против того, чтобы использовались строки для передачи всего с API-сервера и ещё столько же в пользу передачи чисел. Публикую это добавление в качестве шутки.Ответ 2
"1" и 1 это не одно и тоже. С другой стороны если вы получаете с сервера словарь или NSArray тип может быть выжен. Используйте для парсинга NSJSONSerialization и если данные с сервера будут корректны проблем быть не должно.
Комментариев нет:
Отправить комментарий