2013-01-15 16 views
6

Patrzyłem na autoboxing w Objective-C (na przykład here). Czy istnieje nowa składnia rozpakowywania?Objective-C Auto-unboxing z LLVM 4

Na przykład, chcę, aby to zrobić, ale krócej: składnia

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

Druga linia jest przerażające. Czy jest jakaś nowa funkcja językowa, aby sobie z tym poradzić?

+1

Pamiętaj, że nie jest to ani auto-boxing, ani automatyczne rozpakowywanie. Składnia '@ ... 'dla skalarów i kolekcji jest, podobnie jak składnia kropkowa, skrótem kompilatora dla konkretnego wywołania metody. Autoboxing oznaczałby, że nagi skalar ('int x = 5;') byłby magicznie zapakowany, gdyby został przekazany do metody wymagającej 'NSNumber *'. (KVC 'valueForKey:' jest na przykład auto-boxing/un-boxing). – bbum

+1

Dzięki za to, @bbum. Czy można je nazwać "literałami obiektów?" –

Odpowiedz

7
[oneNumber[0] intValue] 

Czasami stare sposoby są najlepsze.

+0

Zawsze zapominam, że istnieją granice składni kropek. +1 świetny punkt –

0

Innym sposobem działania jest pozostanie w świecie obiektów. Na przykład:

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