2013-01-15 90 views
6

我一直在尋找Objective-C中的autoboxing(例如here)。是否有拆箱的新語法?Objective-C使用LLVM自動拆箱4

舉例來說,我想這樣做,但更短:

NSArray *oneNumber = @[@1]; 
int one = ((NSNumber *)oneNumber[0]).intValue; 

第二行的語法是可怕的。是否有任何新的語言功能來解決這個問題?

+1

注意,這既不是自動裝箱,也沒有自動拆箱。標量和集合的'@ ...'語法就像點語法一樣,是具體方法調用的編譯器簡寫。自動裝箱意味着當傳遞給需要「NSNumber *」的方法時,一個純粹的標量('int x = 5;')將被神奇地裝箱。 (例如,KVC的'valueForKey:'是自動裝箱/取消裝箱)。 – bbum

+1

謝謝你,@ bbum。正確地稱他們爲「對象文字?」 –

回答

7
[oneNumber[0] intValue] 

有時舊的方式是最好的。

+0

我總是會忘記點語法是有限制的。 +1重點 –

0

另一種方法是留在物體世界。例如:

NSNumber *one = @1; 
NSArray *oneNumber = @[one]; 
one = oneNumber[0]; 
NSLog(@"one %@", one);