2015-08-21 36 views
3

开发人员告诉我,在Objective-C中使用整数可能令人沮丧,因此他希望直接使用JSON消息中返回的ID的字符串来保存频繁的整数转换和字符串。换句话说,即使它们是服务器上的本地整数,他也希望API将这些ID作为字符串返回。他还说你不能在Objective-C中的字典/地图等东西中使用整数,这样字符串就更好了(他建议我们应该使用'1'而不是1作为数据库表中的主键,这样两个数据类型两边重合)。我对Objective-C知之甚少,但我很难相信这样的基本内容可能会让这种语言变得烦人。据我所知,有不同类型的Objective-C的 '数字' 的:在Objective-C中处理整数

  • intfloatdoublelongshort(C基元)
  • NSIntegerNSUIntegerCGFloat(Objective- C原语)

编辑:NSNumber不是原语,而是一个包装对象类型,它存储和检索不同的原始值。谢谢@rmaddy

后一种类型似乎在不同底层体系结构中对API进行了标准化,因此开发人员不需要关心诸如不同硬件上的32位与64位整数等事情。

回到我的朋友抱怨,处理从Web API返回的整数ID,应该使用哪种数据类型来存储它们并在数据结构(如字典)中使用它们?所说的转换是不可避免的吗?

+4

就其中之一而言,您在这里的自以为是的朋友似乎并不了解可可在NSNumber游戏中拥有最好的数字抽象之一。在Objective-C中,从原始类型到对象类型的转换是微不足道的。如果你需要在收藏中存储数字,NSNumber也可以帮助你。你说得对,整数UUID作为一个字符串返回有点奇怪。如果它只是整数,则返回整数! 'NSJSONSerialization'将会处理它。 – CodaFi

+1

供参考 - “NSNumber”不是原始类型。这是一个班,不同于你列出的所有其他类型。 – rmaddy

+0

正如你的“开发者”朋友告诉你的那样,没有很好的理由将整数转换为字符串是非常糟糕的。如果你有一个NSInteger,你有一个NSInteger。如果你有一个NSString字符串,你不知道它存储了什么。如果items.purchased = @“走开,愚蠢的开发者”,你打算怎么做? – gnasher729

回答

3

你的朋友过期了几年。它曾经是一样糟糕,因为它(尽管如此,我仍然不同意把所有东西都放在字符串中)。

这一切都用现代Objective C语法修复。这是一个字典,其中包含一些数字:

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

当然,它不是最好的语法,可以选择,但它是完全可行的。

此外,还有一些库可用于从线路中获取数据,解析JSON并将结果分解为模型对象。这样,你永远不会真正处理原始的JSON字典。我强烈建议您在提交有线格式之前调查这些选项。