2015-08-21 2 views
3

Мне сказал разработчик, что работа с целыми числами может быть разочаровывающей в Objective-C, поэтому он предпочитает работать непосредственно со строками для идентификаторов, возвращаемых в сообщениях JSON, чтобы сохранить частые преобразования между целыми числами и строки. Другими словами, он хочет, чтобы эти идентификаторы, возвращаемые API как строки, даже если они являются целыми целыми числами на сервере. Он также сказал, что вы не можете использовать целые числа в таких вещах, как словарь/карта в Objective-C, так что снова строки лучше (и он предположил, что мы должны использовать '1' вместо 1 в качестве первичных ключей в таблицах БД, чтобы типы данных на обоих стороны совпадают).Обработка целых чисел в Objective-C

Я мало знаю о Objective-C, но мне трудно поверить, что такой базовый материал может быть настолько раздражающим на этом языке. Из того, что я могу собрать, существуют различные типы 'чисел' в Objective-C:

  • int, float, double, long и short (C примитивов)
  • NSInteger, NSUInteger, CGFloat (объективно- C)

EDIT: NSNumber - не примитивный, а тип объекта-обертки, который хранит и извлекает разные примитивные значения. Спасибо @rmaddy

Последние типы, похоже, стандартизуют API-интерфейсы в разных базовых архитектурах, поэтому разработчикам не нужно заботиться о таких вещах, как 32-разрядные и 64-разрядные целые числа на разных аппаратных средствах.

Назад к жалобе моего друга, для работы с целыми идентификаторами, возвращаемыми из веб-API, какой тип данных следует использовать для их хранения и использования в структурах данных, таких как словарь? Говорят, что конверсии неизбежны?

+4

Во-первых, ваш тщеславный друг здесь, похоже, не понимает, что у Cocoa есть одна из лучших абстракций числа в игре с NSNumber. Преобразование в примитивные типы и из них в типы объектов тривиально в Objective-C. Если вам нужно хранить номера в коллекциях, NSNumber также может помочь вам там. Вы правы, что целочисленный UUID - это немного странная вещь, возвращаемая как строка. Если это действительно целые числа, то верните целые числа! 'NSJSONSerialization' справится с этим просто отлично. – CodaFi

+1

FYI - 'NSNumber' не является примитивным типом. Это класс, в отличие от всех других типов, которые вы указали. – rmaddy

+0

Преобразование целых чисел в строки без уважительной причины, как говорит ваш друг «разработчик», просто ужасно. Если у вас есть NSInteger, у вас есть NSInteger. Если у вас есть NSString, у вас нет подсказки, что хранится в нем. Если items.purchased = @ «Уходи, глупый разработчик», что ты собираешься делать? – gnasher729

ответ

3

Ваш друг устарел на несколько лет. Раньше это было так плохо, как они выглядели (хотя все же я не согласился бы поместить все в строки из-за этого).

Это все было исправлено с помощью современного синтаксиса Objective C. Это словарь с некоторыми числами в нем:

NSUInteger answer = 42; 
NSDictionary * dict = @{@"answerCount": @1, 
         @"value": @(answer)}; 

Конечно, это не самый хороший синтаксис один мог выбрать, но это вполне работоспособно.

Кроме того, существует множество библиотек для приема данных из провода, разбора JSON и взрыва результата в объектах модели. Таким образом, вы никогда не имеете дело с сырыми словарями JSON. Я настоятельно рекомендую изучить эти параметры до того, как вы перейдете в проводной формат.

Смежные вопросы