处理 Objective-C 中的整数

Handling integers in Objective-C

一位开发人员告诉我,在 Objective-C 中使用整数可能会令人沮丧,因此他更喜欢直接使用 JSON 消息中返回的 ID 的字符串,以节省频繁的转换介于整数和字符串之间。换句话说,他希望 API 将这些 ID 作为字符串返回,即使它们在服务器上本来就是整数。他还说你不能在 Objective-C 中的 dictionary/map 这样的东西中使用整数,这样字符串又更好(他建议我们应该只使用 '1' 而不是 1 作为数据库表中的主键,使两边的数据类型一致)。

我对 Objective-C 知之甚少,但我很难相信这种基本的东西在语言中会如此烦人。据我所知,Objective-C 中有不同类型的 'numbers':

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

后一种类型似乎在不同的底层架构中标准化了 APIs,这样开发人员就不需要关心不同硬件上的 32 位与 64 位整数之类的事情。

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

你的朋友已经过时几年了。它曾经像他们想象的那样糟糕(尽管我仍然不同意因此而将所有内容都放入字符串中)。

现代 Objective C 语法已全部修复。这是一本字典,里面有一些数字:

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

当然,这不是人们所能选择的最好的语法,但它非常可行。

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