2015-08-21 61 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字典。我強烈建議您在提交有線格式之前調查這些選項。