开发人员告诉我,在Objective-C中使用整数可能令人沮丧,因此他希望直接使用JSON消息中返回的ID的字符串来保存频繁的整数转换和字符串。换句话说,即使它们是服务器上的本地整数,他也希望API将这些ID作为字符串返回。他还说你不能在Objective-C中的字典/地图等东西中使用整数,这样字符串就更好了(他建议我们应该使用'1'
而不是1
作为数据库表中的主键,这样两个数据类型两边重合)。我对Objective-C知之甚少,但我很难相信这样的基本内容可能会让这种语言变得烦人。据我所知,有不同类型的Objective-C的 '数字' 的:在Objective-C中处理整数
int
,float
,double
,long
和short
(C基元)NSInteger
,NSUInteger
,CGFloat
(Objective- C原语)
编辑:NSNumber
不是原语,而是一个包装对象类型,它存储和检索不同的原始值。谢谢@rmaddy
后一种类型似乎在不同底层体系结构中对API进行了标准化,因此开发人员不需要关心诸如不同硬件上的32位与64位整数等事情。
回到我的朋友抱怨,处理从Web API返回的整数ID,应该使用哪种数据类型来存储它们并在数据结构(如字典)中使用它们?所说的转换是不可避免的吗?
就其中之一而言,您在这里的自以为是的朋友似乎并不了解可可在NSNumber游戏中拥有最好的数字抽象之一。在Objective-C中,从原始类型到对象类型的转换是微不足道的。如果你需要在收藏中存储数字,NSNumber也可以帮助你。你说得对,整数UUID作为一个字符串返回有点奇怪。如果它只是整数,则返回整数! 'NSJSONSerialization'将会处理它。 – CodaFi
供参考 - “NSNumber”不是原始类型。这是一个班,不同于你列出的所有其他类型。 – rmaddy
正如你的“开发者”朋友告诉你的那样,没有很好的理由将整数转换为字符串是非常糟糕的。如果你有一个NSInteger,你有一个NSInteger。如果你有一个NSString字符串,你不知道它存储了什么。如果items.purchased = @“走开,愚蠢的开发者”,你打算怎么做? – gnasher729