Мне сказал разработчик, что работа с целыми числами может быть разочаровывающей в 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, какой тип данных следует использовать для их хранения и использования в структурах данных, таких как словарь? Говорят, что конверсии неизбежны?
Во-первых, ваш тщеславный друг здесь, похоже, не понимает, что у Cocoa есть одна из лучших абстракций числа в игре с NSNumber. Преобразование в примитивные типы и из них в типы объектов тривиально в Objective-C. Если вам нужно хранить номера в коллекциях, NSNumber также может помочь вам там. Вы правы, что целочисленный UUID - это немного странная вещь, возвращаемая как строка. Если это действительно целые числа, то верните целые числа! 'NSJSONSerialization' справится с этим просто отлично. – CodaFi
FYI - 'NSNumber' не является примитивным типом. Это класс, в отличие от всех других типов, которые вы указали. – rmaddy
Преобразование целых чисел в строки без уважительной причины, как говорит ваш друг «разработчик», просто ужасно. Если у вас есть NSInteger, у вас есть NSInteger. Если у вас есть NSString, у вас нет подсказки, что хранится в нем. Если items.purchased = @ «Уходи, глупый разработчик», что ты собираешься делать? – gnasher729