在Objective-C中处理整数

3
我听一个开发者说,在Objective-C中使用整数可能会令人沮丧,所以他更喜欢直接使用字符串来存储JSON消息返回的ID,以避免频繁转换整数和字符串。换句话说,即使服务器上本来是整数类型,他也希望API返回这些ID为字符串。他还说在Objective-C中不能像字典/映射那样使用整数,所以再次使用字符串更好(他建议我们只需在DB表中使用'1'而不是1作为主键,以便两边的数据类型一致)。
我对Objective-C知之甚少,但我很难相信这种基础性的东西在语言中会如此令人讨厌。据我了解,Objective-C中有不同类型的“数字”:
- int、float、double、long和short(C基本类型) - NSInteger、NSUInteger和CGFloat(Objective-C基本类型)
后一种类型似乎标准化了不同底层架构之间的API,使得开发人员不需要关心不同硬件上的32位与64位整数等问题。
回到我的朋友的抱怨,对于从Web API返回的整数ID,应该使用哪种数据类型来存储它们并在数据结构(如字典)中使用它们?这些转换是否不可避免?

4
首先,你这位有自己见解的朋友似乎没有意识到Cocoa使用NSNumber拥有游戏中最好的数字抽象方式。在Objective-C中,将基本类型转换为对象类型以及从对象类型转换回基本类型都是非常简单的。如果需要将数字存储在集合中,NSNumber也可以帮助你实现。你说得对,将整数UUID作为字符串返回确实有些奇怪。如果确实只有整数,那就直接返回整数!NSJSONSerialization可以很好地处理它。 - CodaFi
1
FYI - NSNumber 不是原始类型。它是一个类,不像你列出的所有其他类型。 - rmaddy
将整数转换为字符串没有任何好处,正如你的“开发者”朋友告诉你的那样,这是非常糟糕的。如果你有一个NSInteger,你就有了一个NSInteger。如果你有一个NSString,你不知道里面存储了什么。如果items.purchased = @"走开,愚蠢的开发者",你该怎么办? - gnasher729
造成沮丧的原因通常是PHP/JavaScript程序员根本不关心他们返回的JSON类型。 - vadian
如果你的朋友只使用NSString对象作为NSDictionary的键,那么这将是一件麻烦事。在这种情况下,我们总是需要在设置键值对之前进行转换。 - vignesh kumar
1个回答

3

你的朋友有些过时了。虽然以前把所有内容都放在字符串里确实很糟糕(我也不同意这样做),但现代Objective C语法已经解决了这个问题。

以下是一个包含一些数字的字典:

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

没错,这并不是最好的语法选择,但它完全可行。

此外,有许多库可以从网络获取数据,解析JSON,并将结果拆分为模型对象。这样,您就不必真正处理原始的JSON字典。在确定线路格式之前,强烈建议您调查这些选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接