開發人員告訴我,在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